如何在c ++中读取字符串中的字符和数字

时间:2011-11-18 07:38:26

标签: c++ string

我正在尝试读取一个分别显示数字和字符的字符串。

其他信息:
1.程序显示10(十)为1和0,即两个单独的数字
它还将空间视为一个角色,它应该跳过它 3.如果用户输入10 20 +,则应显示:
数字是10
数字是20
其他角色是+

<小时/> 这是我尝试过的

#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");
}

不工作

2 个答案:

答案 0 :(得分:2)

您可以使用字符串流。

[...]
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 :(得分:1)

当角色是空格时(检查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";
    }
}