输入一个长度不超过30的字符串,内有数字字符和非数字字符(不包括“-”),输出这样的非负整数?

请各路大神看一下原题,再查看一下我的代码有什么错误!
输入一个长度不超过30的字符串,内有数字字符和非数字字符(不包括“-”),统计其中包含了多少个非负整数,并输出这样的非负整数。
输入
一个长度不超过30的字符串,其中不包括“-”。
输出
字符串中包含的非负整数,一个一行。如果没有数据,什么都不输出。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i, k = 0;
char s[40];
cin.getline(s, 40);
for (i = 0; i < strlen(s); i++)
{
if (s[i] >= '0' && s[i] <= '9')

if (i == 0 || (s[i - 1] < '0' || s[i - 1]>'9') && s[i - 1] != '-')
{
while (s[i] >= '0' && s[i] <= '9' && i < strlen(s))
{
cout << s[i++];
}
cout << endl;
}
}
}

我估计是题目要求你求出这个整数,而不是仅输出。另外,在for循环中使用i做循环变量,在循环体中又对i进行自加运算,容易导致循环控制出问题,增加了程序出错几率。建议修改程序如下,另另外你的程序并未统计输出数据的个数并输出:
int main() { int i, k = 0,x=0,b=0; char s[40];
cin.getline(s, 40);
for ( i = 0; s[i]!=0; i++ ) {
if (s[i] >= '0' && s[i] <= '9') { b=1; x*=10; x+=s[i]-'0'; cout<<s[i]; }
else {
if ( b ) {
cout<<endl; //cout<<x<<endl;
x=0; b=0; k++;

}
}
cout<<k<<endl;

return 0;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-07

程序正确啊!

有什么问题呢?

相似回答