2013-10-05 3 views
1

Я пытаюсь читать в нескольких строках, которые принадлежат вектору structs из одной строки, но строка не имеет пробелов. Вот в основном моя проблема: данныеКак разбить строку (без пробелов) на отдельные строки?

Файл:

G01G02G03G04G05

И когда я прочитал в:

for (int i=0;i<5;i++) 
    File>>vector.at(i).string 

И что я получаю это первая строка в вектор

G01G02G03G04G05

Где я предпочел бы его:

вектор (1) = G01;
вектор (2) = G02 ... и так далее

К сожалению забыл какую-то информацию, Im в C++ VS2010 и всегда длинные три символа, начинающихся с G, R, C, D

+1

который langauge вы используете? если он всегда «G» впереди, используйте его как разделитель и добавьте к каждому считываемому значению – jev

+0

извините, его в C++ и не всегда G, это может быть только G, R, C, D – user2840470

+0

Являются ли жетоны всегда тремя символы длинные, правда? – us2012

ответ

1

Это, как я бы разделил подстроки в вектор:

std::vector<std::string> parseData(const std::string& s) 
{ 
    if (s.size() % 3 != 0) { 
     throw std::runtime_error("incorrect data length"); 
    } 

    std::vector<std::string> result;`enter code here` 
    for (size_t i = 0; i <= s.size() - 3; i += 3) { 
     result.emplace_back(s, i, 3); 
    } 

    return result; 
} 

См coliru для полного компилируемый демо.

Вы можете использовать generalise для поддержки любых подстрок длины.

+0

Как правило, это хорошая форма, чтобы поддержать ответ, который вы принимаете ....: | – goji

1

C++ не может знать, что вы хотите, чтобы он рубил так; вы можете одинаково хотеть каждого символа в отдельной строке. не в пучках 2 символов, ....

Прочти в одну строку, то нарежьте строку вверх

for (int i = 0; i < 5; i++) 
{ 
    std::string bit = instr.substr(i * 3,3); 
    vec.push_back(bit); 
} 
1

"Да, это всегда длинные три символа"

Затем он мог бы выглядеть следующим образом:

std::vector<std::string> tokens; 

std::string line; 
if (getline(cin, line)) { 
    for (size_t i = 0; i < line.size(); i += 3) { 
     tokens.push_back(line.substr(i, 3)); 
    } 
} 
Смежные вопросы