c++ 求改正。。将字符串中的连续整数作为一个整体,依次存放在一数组a中。

将字符串中的连续整数作为一个整体,依次存放在一数组a中。统计共有多少个整数,并输出这些整数。

错误代码如下:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
int i,n,a[20],z[40],k=0,j=0,x;
for(i=0;;i++)
if(str[i]=='\0') {n=i;break;}
for(i=0;i<n;i++)
{
if(str[i]>=48&&str[i]<=57)
{
z[k]=int(str[i]-48);
k++;
}
else
{
if(k!=0)
{
for(x=0;x<k;x++)
{
a[j]=a[j]+z[x]*pow(10,k-1-x);
}
j++;
k=0;
}
}
}
for(i=0;i<=j;i++)
cout<<a[i]<<" "<<endl;
cout<<endl<<j+1<<endl;
return 0;
}

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
int i,n,a[20],z[40],k=0,j=0,x;
for(i=0;i<20;i++)//初始值为0,你下面实现pow,不初始值的话输出的a[i]是一个大负数
a[i]=0;
for(i=0;;i++)
{
if(str[i]=='\0')
{
n=i;
break;
}
}
for(i=0;i<n;i++)
{
if(str[i]>=48&&str[i]<=57)
{
z[k]=str[i]-48;
k++;
}
if(str[i]<48||str[i]>57||i==n-1)//如果你输入qwe123的话,照你原代码是输不出123的,因为3后面
{ //没有字符,所以else进不去
if(k!=0)
{
for(x=0;x<k;x++)
{
a[j]=a[j]+z[x]*pow(10,k-1-x);//初始值
}
j++;
k=0;
}
}
}
for(i=0;i<j;i++)//一次整数就j++(j=1,i=0)第二次就j=2(i=1),显然不用i<=j,i<j就可以了
cout<<a[i]<<" "<<endl;
cout<<endl<<j<<endl;
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-18
修改后:

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
int i,n,a[20],k=0,j=0,num=0;
n = str.length();

for(i=0;i<=n;i++)
{
if(str[i]>=48 && str[i]<=57)
{
num = num * 10 + str[i]-48;
k++;
}
else
{
if(k!=0)
{
a[j] = num;
num = 0;
j++;
k=0;
}
}
}
for(i=0;i<j;i++)
cout<<a[i]<<" "<<endl;
cout<<"total num="<<j+1<<endl;
return 0;
}本回答被提问者采纳
相似回答