我正在尝试读取一个分别显示数字和字符的字符串。
其他信息:
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");
}
不工作
答案 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";
}
}