Софтуерно Инженерство
Loading...
v.krastev avatar v.krastev 58 Точки

Integer Parser със стрйимове

Здравейте!

Опитвам се да направя следното - въвежда се ред от козолата и от там с функция се парсват интеджерите в един масив. Горе-долу го направих но имам следния проблем: тъй като не знам предварително колко трябва да е голям масива, първо чета реда в стринг и после броя колко отделни думи (тоест низове разделени със спейс има) и това слагам за размер на въпросния масив. да речем при вход "1 2 3" има три думи така да се каже, размер на масива - 3 и всичко си е ок. ако входа е да речем "1 2a r" отново са 3 думи, отново размера на масива е три - но има непарснати следните символи - 'a' и 'r'. това предполага юзъра да въведе още две числа, но вече съм заделил масив с размер 3 в които има "1 2 0" - при въвеждане на още две числа се побира само първото, и така ако юзъра е искал да въведе 4 числа, а не три, вече е невъзможно. някакво решение на проблема? или по-скоро друга логика по която да инициализирам масива? мислех за вариант всичко първо да се сложи в стринг и чак тогава да му гледам размера и да ги вкарвам един по един елементите в масива, но ми се струва че трябва да има и по-лесен начин... приемам всякакви предложения, забележки и препоръки! ето и кода.

Благодаря предварително!

Тагове:
0
C++ Fundamentals
Jovanna avatar Jovanna 100 Точки
Best Answer

Тествах, кодът ти е верен.

Предполагам това е поведението на:   int num0;  istringstream iss(str0);    //по-долу в кода

Явно чете и числа, след които са долепени други символи, като взема само цифрите, взима си числото с тях и спира преди останалите символи, нищо че няма спейс.

enter SOME NUMBERS: 1 22e 33ttt 444uu 5 66y
NUMBERS you entered: 1, 22,
enter array elements: 1 22e 33ttt 444uu 5 66y
unparsed numbers: e ttt uu y enter again:      //Enter директно.
array elements:
1 22 33 444 5 66

Code:

cout << "enter SOME NUMBERS: ";
    string str0;
    getline(cin, str0);

    vector<int> data;
    istringstream iss(str0);
    int num0;
    while(iss >> num0)
    {
        data.push_back(num0);
    }
    cout << "NUMBERS you entered: ";
    for (int e : data)
    {
        cout << e << ", ";
    }
    cout << endl;

+ твоят код.

 

 

0
v.krastev avatar v.krastev 58 Точки

Да да, благодаря! Нито вектор съм използвал, нито isalpha, нито atoi... определено помогна, благодаря!

1