C语言课后习题(64)
谭浩强C语言第五版的一些课后习题第八章 第十六题输入一个字符串,含有数字和非数字,将连续的数字作为一个整数存放到数组中,并统计有多少个整数,然后输出int main(){char str[50],*p;printf("输入字符串\n");gets(str);p=str;int i=0,j=0,k,e10;//j记录位数个数 k记录当前位数e10为当前数字需要乘的10的倍数int dig;//dig
·
谭浩强C语言第五版的一些课后习题
第八章 第十六题
输入一个字符串,含有数字和非数字,将连续的数字作为一个整数存放到数组中,并统计有多少个整数,然后输出
int main(){
char str[50],*p;
printf("输入字符串\n");
gets(str);
p=str;
int i=0,j=0,k,e10; //j记录位数个数 k记录当前位数 e10为当前数字需要乘的10的倍数
int dig;//dig 保存字符转为的数字
int a[10],*pp=a;//a用于保存数字,
int m;
int ans=0;//表示总共整数有几个
while(*(p+i)!='\0'){
if((*(p+i)>='0')&&(*(p+i)<='9')){
j++; //记录位数有多少个
}
else{ //到非数字
if(j>0){ //并且有位数
dig=*(p+i-1)-48; //前一个为数字 且为个位上的数字
k=1;
while(k<j){ //j位数 k表示当前是第几位
e10=1;
for(m=1;m<=k;m++) e10=e10*10; //退出时e10为当前第k+1位需要乘的倍数
dig=dig+(*(p+i-1-k)-48)*e10;
k++;
} //退出循环时 整数已经得到 即为dig
//赋值操作
*pp=dig;
ans++; //总数增加
pp++;
j=0; //重置位数判断
}
}
i++; //不管什么情况 指针后移
}//退出字符串循环
//注意 这里如果是数字结尾的字符串,j是有值的
//但是不会统计最后 因为到'\0'就退出了 还没到else
if(j>0){ //将该种情况加入数据
dig=*(p+i-1)-48;
k=1;
while(k<j){
e10=1;
for(m=1;m<=k;m++) e10=e10*10;
dig=dig+(*(p+i-1-k)-48)*e10;
k++;
}
*pp=dig;
ans++;
pp++;
j=0;
}//特殊情况结束
printf("统计结果有%d个数字:\n",ans);
pp=a;//将pp重新指向开头
for(i=0;i<ans;i++){
printf("%d ",*(pp+i));
}
printf("\n");
return 0;
}
更多推荐

所有评论(0)