Строковый поток C ++, если слово числовое, разделить на два

Я новичок в программировании и должен создать программу, которая читает подсказку: «Мне нужно потратить 8 долларов». Затем необходимо распечатать каждое слово в отдельной строке, а затем, если какая-либо из строк является числовой, ее нужно разделить на 2. Следовательно, в конечном итоге она должна быть распечатана как:

I
have
4
dollars
to
spend.

Мне удалось все сделать, кроме как найти числовое значение и разделить его на 2. Пока что у меня есть это:

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

    using namespace std;

    int main()
    {
string prompt;
string word;

cout << "Prompt: ";

getline(cin, prompt);

stringstream ss;
ss.str(prompt);

while (ss >> word)
{
cout << word << endl;
}

return 0;
}

После просмотра различных других сообщений я не могу заставить это работать. Я предполагаю, что это оператор if / else внутри цикла while вдоль строк, if numeric, установить int num в num / 2, затем cout ‹< num ‹< endl; Я не могу этого понять.

Заранее спасибо.


person Tyler    schedule 28.08.2013    source источник


Ответы (3)


Вы можете использовать класс stringstream, который обрабатывает преобразования между строками и другими типами данных, чтобы попытаться преобразовать заданную строку в число. Если попытка успешна, вы знаете, что объект stringstream позволяет вам обрабатывать строку так, как если бы она была потоком, подобным cin или cout.

Включите это в свой цикл while, например:

while (ss >> word)
{
int value = 0;
stringstream convert(word); //create a _stringstream_ from a string
//if *word* (and therefore *convert*) contains a numeric value,
//it can be read into an _int_
if(convert >> value) { //this will be false if the data in *convert* is not numeric
  cout << value / 2 << endl;
}
else
  cout << word << endl;

}
person maditya    schedule 28.08.2013
comment
Аааааааааааааааааааааааааааааааааааааааааааааааааааа, это сработало. На самом деле я пробовал что-то почти идентичное этому, за исключением того, что я не включил stringstream convert (word) ;. Очень признателен за помощь. - person Tyler; 28.08.2013

Функция strtol (версия C ++ 11, которая работает с std::string напрямую: std::stol) действительно хороша для проверки того, содержит ли строка число, и если да, то каково это числовое значение.

Или вы можете продолжать использовать iostreams, как раньше ... попробуйте извлечь число (переменную int или double), и если это не удастся, очистите бит ошибки и прочитайте строку.

person Ben Voigt    schedule 28.08.2013

У меня нет 50 представителей, поэтому я не могу комментировать, поэтому я пишу это как ответ. Я думаю, вы можете проверить это символ за символом, используя значение Ascii каждого символа, и если есть значения ascii, представляющие числа между двумя пробелами (в данном случае два \ n, поскольку вы уже разделили каждое слово), тогда вам нужно разделить число на 2.

person Sumedh    schedule 28.08.2013