#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,number,i,k,j,p;
number=0,p=0;
char z[1000]; /* 定义一个字符数为1000的数组,防止输入字符串过长溢出*/
scanf("%d",&n); /*输入代表测试实例个数的n*/
for(j=0;j<n;j++) /*这几行代码的作用是输入测试的字符,当输完一串之后,输出换行符换行,继续输入下一串,直到n行字符串全部输入完成*/
scanf("%s",&z);
printf("\n");
for(k=0;k<n;k++) /*这个for语句的作用是把n行字符串全部执行完*/
{
i=p; /*这个语句的作用是当执行完某一行字符串时,可以在数组中接着上一行的数组地址往下执行,而不是重新从数组z[0]开始执行*/
for(i=p;i<1000;i++)
{ p=i; /*for语句的第一个语句只执行一次,之后i会自增,作用和上面那一条一样*/
if(z[i]!='\0') /*如果为换行符,则跳出此循环*/
{
if((z[i]>=0 && z[i]<=9))
{
number=number+1;
}
}
else
p=p+1; continue;
}
printf("%d\n",number);
}
/*********End**********/
return 0;
}
1,找数字个数只用遍历一次字符串
2,判断数字字符要加单引号''
#include<stdio.h>
int main()
{
/*********Begin*********/
char t[1000];
int j,count,n;
scanf("%d",&n);
while(n--)
{
scanf("%s",t);
count=0;
for(j=0; t[j]!='\0'; j++) //遍历字符串
{
if(t[j]<='9'&&t[j]>='0') //判断数字字符要加''
{
count++;
}
}
printf("%d\n",count);
}
/*********End**********/
return 1;
}
供参考:
#include <stdio.h>
int main()
{
/**********Begin*********/
int n, number, k, j;
number = 0;
char z[1024];
scanf("%d", &n);
for (j = 0; j < n; j++) {
scanf("%s", z);
for (k = 0, number = 0; z[k] != '\0'; k++)
{
if (z[k] >= '0' && z[k] <= '9')
number++;
}
printf("%d\n", number);
}
/**********End**********/
return 0;
}
for(j=0;j<n;j++)
scanf("%s",&z);
你定义的z只是一个字符串,不是字符串数组啊。
按照你的注释,应该是个字符串数组才可以。考虑n的最大可能性,可以定义如char z[100][1000]
然后
for(j=0;j<n;j++)
scanf("%s",z[j]);
if((z[i]>=0 && z[i]<=9))这边比较错误,字符的比较要看ascii表格
ascii码中数字的十进制不是09,而是4857,你可以去搜一下ascii码表格
其余问题别人已经说了,我就不重复了,i=p p=i 是干嘛来着?你这个下个字符串肯定运行不了。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!