输入一个字符串,内有数组和非数字字符,例如
A123x56 17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中,例如123放到a[0],456放在a[1]......统计有多少个整数,并输出这些数。
我这样写哪里出问题了呢?
#include <stdio.h>
void main(){
char s[]="A123x56 17960?302tab5876";
char a[10]={0};
char *p=s,*q=a;
int i=0,sum=0;
while (*p){
if (*p>='0' && *p<='9')
{
a[i]=a[i]*10+(*p-'0');//a数组存放字符串中的数字,如果数字字符连续出现,则a数组的下标不变。
p++;
sum++;//计算数字个数
}
else if (sum>0)//如果数字个数大于0,*p又是非数字字符
{
sum=0;
i++;
p++;
}
else if(sum==0) p++;
}
for(i=0;i<10;i++)
printf("a[%d]=%d\n ",i,a[i]);
}
输出
#include <stdio.h>
#include <math.h>
void output(char *s, int n); //定义输出函数
int main()
{
char str[30];
printf("Please enter string: "); //输入字符串
gets(str);
output(str, 30); //调用输出函数
return 0;
}
//输出函数
void output(char *s, int n)
{
char *i;
int j, k, t, m, temp[10], num;
double sum, a[30];
for (i=s, num=0, j=0, m=0; i<s+n; i++)
if (*i>='0'&&*i<='9') num=1, temp[j++]=(int)(*i-'0');
else if (num){
for (num=0, k=0, sum=0, t=j-1; k<j; sum+=temp[k]*pow(10, t), t--, k++);
a[m++]=sum, j=0;
}
for(j=0, printf("There is %d number in the string.\nResult: ", m); j<m; printf("%.0f ", a[j++]));
printf("\n");
}
printf()函数用法:
printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=6789;
printf("a=%d\n",a);
输出结果为a=6789。
if (*p>='0' && *p<='9')
{
a[i]=a[i]*10+(*p-'0');//a数组存放字符串中的数字,如果数字字符连续出现,则a数组的下标不变。
p++;
sum++;//计算数字个数
}
这一段中连续数字字符每处理一个就sum++;了,按要求是一个整数sum增1一次;char a[10]={0};这个声明也有问题,a的元素只有1字节,绝大多数整都放不下。所以再没有往下看,写得也太复杂,下面提供一个作参考……
//#include "stdafx.h"//vc++6.0加上这一行.