c语言问题:输入一个字符串,内有数字和非数字字符,例如:a123x456 17960?

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:18:49
将其中连续数字作为一个整数,依次存放到一数组a中。例如,123放在a[0]中,456放在a[1]中,要求统计共有多少个整数,并输出这些数。
要简单易看懂的,我是初学者。满意了还会追加分数。

其实不是很复杂,但是不能直接很容易的读入一个整数了。
程序就不贴了,大概讲一下思路吧。
你得手工一个一个读入字符,然后准备一个int,比如是now,默认是-1;
每读入一个char,判断是否是'0'-'9'之间的数字,如果是,那么说明这个数字是跟在now这个东西的后面的,比如读入了'3',而now是24,说明至少这个值应该是243.但是第一次得判断一下,如果这个时候now是-1,说明现在碰到的数字是第一位的数字,如果遇到了3,now应该变成3.
如果读入的不是'0'-‘9‘,那么当前的now就是一个已经取得的值了(如果now不是-1的话),把now放到你的答案数组里就好了,然后记得把now重新变成-1。

为什么初始化的时候now要赋成-1,是因为可能一堆数字里有0的问题,你可以考虑一下这个问题。还有以上的做法没有考虑负数的问题,但总的思路是一样的。
一句话概括,手工读字符,手工来组合数字判断断点。

你是不是想知道数组中每个元素有多少个整数

#include <stdio.h>
#include <string.h>
void main()
{
char b[]="a123x456 17960?";
int a[20]={0},len=strlen(b),i,j=1,k=-1;
for(i=0;i<=len;i++)
printf("%d: ",a[i]);
for (i=0;i<=len-1;i++)
{
if(b[i]<58 && b[i]>=48)
{
a[k]=a[k]*10+b[i]-48;}
else {k++;}
}
k=20;
for(i=0;i<20;i++)
if (a[i]==0) {for(j=i;j<20;j++)a[i]=a[i+1];k--;}
fo