Как читать несколько целых чисел из строки C ++ - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь понять, как я могу преобразовать несколько целых чисел из строки. Я пытался использовать atoi(), stoi() и istringstream(), и все они делают то же самое. Я не могу получить более одного целого числа.

Например, если строка "Chocolate and Milk 250 pounds and 2 oz or 1.5 coins." Все вышеперечисленные функции не будут работать. Это не займет всю строку. Если я оставлю только один номер, он будет работать. Я хочу иметь возможность прочитать всю строку и получить все только целые числа (не с плавающей точкой ).

Я использую while(getline()) для строки , Затем попробуйте получить его в строку.

Хотя, если бы я мог только вернуть общее количество целых чисел в строке, было бы лучше. В любом случае, я пытаюсь изучить оба пути. В этом случае вывод будет "2", поскольку есть только два типа int.

1 Ответ

2 голосов
/ 04 февраля 2020

Один из способов - разделить строку, используя в качестве разделителя и используя stoi для отдельных строк, чтобы проверить, являются ли они целыми числами.

#include <iostream>
#include <sstream>
#include <string>

int main(){
    std::string s = "Chocolate and Milk 250 pounds and 2 oz or 1.5 coins.";
    int count = 0;
    std::istringstream iss(s);
    std::string token;
    while(getline(iss,token,' ')){
        if(std::isdigit(token[0]) &&stoi(token) && token.find('.')==std::string::npos){
            count++;
        }
    }

    std::cout<<count<<std::endl;
}

Обратите внимание, что более сложные проверки могут выполняться в строках, если stoi успешно, но ввод не является допустимым целым числом. Вы можете иметь вспомогательную функцию, которая проверяет, являются ли все символы цифрами или нет, используя isdigit et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...