Деление на слова некорректно работает с нулями

В последнее время я работаю над написанием фрагментов для своих финалов. Одна из общих задач — разделить строку (std :: string) на слова. В некоторых случаях эти строки могут содержать целые числа.

Я написал фрагмент:

#include <sstream>
#include <iostream>
#include <vector>
using namespace std;

int main(void)
{
string str="23 005 123";
vector<int>myints;
istringstream iss(str);

string word;

while(iss>>word)
{
int a;
istringstream(word)>>a;
myints.push_back(a);
}

for (vector<int>::iterator it=myints.begin();it!=myints.end();++it)
cout<<*it<<" ";

}

Это работает, хотя есть проблема. Я получаю 5 от str вместо 005. Кажется, что VC ++ сжимает все нули. Как можно избежать этого, используя только функции C ++ (не strtok из string.h / cstring)?

Я получаю это как на MS VC ++ 2008, так и на gcc.

Спасибо!

1

Решение

Если вам нужно запомнить число начальных нулей из входных данных и напечатать их с точно таким же количеством начальных нулей позже, единственный вариант — не хранить как int, Вы могли бы, например, повернуть vector<int> в vector<string>,

В качестве альтернативы, вы можете использовать vector< pair<int,string> >, который содержит целое число, которое вы хотите вместе с исходным строковым представлением.

Наконец, если вас не интересует фактическое число начальных нулей, которые были на входе, а просто хотите, чтобы все было дополнено начальными нулями равной длины, вы можете использовать setfill а также setw :

cout << setfill('0') << setw(5) << 25;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]