Как читать символы и цифры из строки в C ++ - PullRequest
1 голос
/ 18 ноября 2011

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

Дополнительная информация:
1. программа показывает 10 (десять)как 1 и 0, то есть две отдельные цифры
2. Он также считает пробел как символ, который он должен пропустить.
3. Если пользователь вводит 10 20 +, он должен отображать:
цифраэто 10
цифра 20
другой символ + + 1013 *


Вот что я пробовал
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("10 20 +");
    const char *p = s.c_str();
    while (*p != '\0')
    {
        if(isdigit(*p))
        {
            cout << "digit is: "<< *p++ << endl;
        }
        else
        {
            cout<<"other charcters are:"<<*p++<<endl;
        }

    }

    system("pause");
}

Редактировать Теперь он становится:

#include <iostream>
#include <string>
using namespace std;

int main() {
               string x;
string s("1 2 +");
const char *p = s.c_str();
while (*p != '\0')
{
while(isspace(*p)){
                   *p++;
      if(isdigit(*p))
      {
                     while(isdigit(*p))
                     {

                                 x+=*p++;
                                        cout << "digit is: "<< x<< endl;
            }

       }

       else{
            while(!isdigit(*p)&& !isspace(*p))
            x+=*p++;
            cout<<"other charcters are:"<<x<<endl;
            }
}
}
system("pause");
}

Не работаетg

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Вместо этого вы можете использовать поток строк.

[...]
stringstream ss;
ss << s;
while(!ss.eof())
{
    char c = ss.peek(); // Looks at the next character without reading it
    if (isdigit(c))
    {
        int number;
        ss >> number;
        cout << "Digit is: " << number;
    }
    [...]
}
1 голос
/ 18 ноября 2011

Пока символ является пробелом (проверьте функцию isspace), пропустите его.

Если текущий символ представляет собой цифру, то в то время как текущий символ представляет собой цифру, поместите его во временную строку. Когда символ больше не является цифрой, у вас есть число (которое может быть одной цифрой ).

В противном случае, если символ не является цифрой или не является пробелом, сделайте то же самое, что и для чисел: соберите во временную строку и покажите, когда она заканчивается.

Начать сначала.

Редактировать Пример кода по запросу:

std::string expression = "10 20 +";
for (std::string::const_iterator c = expression.begin(); c != expression.end(); )
{
    std::string token;

    // Skip whitespace
    while (isspace(*c))
        c++;

    if (isdigit(*c))
    {
        while (isdigit(*c))
            token += *c++;
        std::cout << "Number: " << token << "\n";
    }
    else
    {
        while (!isidigit(*c) && !isspace(*c))
            token += *c++;
        std::cout << "Other: " << token << "\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...