求救!程序结果不对 找不到原因额……
哎……因为另外一个问题 代码以前贴过 但是正常执行之后发现结果不对……本来不想问 但是实在不会……
目的:将一个字符串中的数字提取 赋给一个整形数组 再输出
例:输入字符串13d123a22a1ad1
那么应该把13赋给a[0],123赋给a[1],22赋给a[2]……(a[]是整形数组)
小弟代码如下
- C/C++ code
#include<iostream>using namespace std;int main(){ int fac(int ,int); const int n=30; char a[n],b[n]; int d[n],i,j,k,l,count=-1; cout<<"请输入一个字符串,程序将把其中的数字提出"<<endl<<endl; cin>>a; for(i=0;i<=n-1;i++) //按顺序查找字符串 { if(a[i]=='\0') break; if(a[i]>=48 && a[i]<=57) // 找到数字的话,继续向下找,直到找到非数字字符 { count++; for(j=i;;j++) { if(a[j]<48 || a[j]>57) //找到非数字字符,i和J之间的字符为一个数字 { for(k=0;k<=j-i-1;k++) { b[k]=a[i+k]; //将这段数字给b[]数组 } b[k+1]='\0'; break; //一个完整的数字找到后跳出循环 } } for(k=j-i,l=0;k>=1;k--,l++) { d[count]=fac(int(b[l])-48,k-1)+d[count]; //将b[]数组中的数字转化为整数给d[] } i=j; } } for(i=0;i<=count;i++) cout<<d[i]<<" "; system("pause"); return 0;}//fac()是计算a的b次幂的函数 int fac(int a,int b){ int i; if(b==0) return a; else { for(i=0;i<=b-1;i++) a=a*10; return a; }}运行之后
输入
123a132a123a132
输出
123 16777348 123 148
也就是说……奇数个的答案是对的 偶数个答案是错的
求解 这是怎么回事
[解决办法]
用这个是不是简单点
#include<iostream>
#include <string>
#include<vector>
using namespace std;
int main()
{
string in;
vector<int> des;
cout<<"Enter a string:";
cin>>in;
for(string::size_type sz=0;sz!=in.size();++sz)
if(isdigit(in[sz]))
des.push_back(atoi(&in[sz]));
for(vector<int>::size_type i=0;i!=des.size();++i)
cout<<des[i];
return 0;
}
[解决办法]
- C/C++ code
char a[n]={0},b[n]={0}; int d[n]={0},i,j,k,l,count=-1; //你定义的时候,无论是字符串数组还是整型数组,都要记得清零,这样防止出现乱码之类的