对于下面给出的问题,我得到一个大输入(测试用例)的错误答案如何解决这些类型的错误:
给定一个字符串S,找到数字中存在的数字总数 . 输入第一行包含T,即测试用例的数量 . 每个testc ase的第一行将包含一个整数N,即字符串的长度 . 每个测试用例的第二行将包含一个长度为N的字符串S.输出对于每个测试用例,输出字符串中存在的数字总数 . 约束0 <T <200 0 <N <10000样本输入1
26
sadw96aeafae4awdw2wd100awd
样本输出4
Code
#include<stdio.h>
#include<string.h>
void clean_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
int main()
{
char s[10000];
int i,c=0,t;
long long int l;
scanf("%d",&t);
while(t--)
{
clean_stdin();
// gets(s);
scanf("%lld",&l);
for(i=0;i<l;i++)
{
scanf("%c",&s[i]);
}
for(i=0;i<l;i++)
{
if(isdigit(s[i])&&(isalpha(s[i+1])||s[i+1]=='\0'))
{
c++;
}
}
printf("%d\n",c);
}
return 0;
}
1 回答
scanf("%lld", &l);
不会在数字后丢弃换行符,因此第一个scanf("%c", ...)
读取的字符是换行符 .因此,如果数字正好是
9999
,它将读取换行符和9998个后续字符,忽略第9999个 .修复是在
%lld
之后添加一个空格:scanf("%lld ", &l);
;这将丢弃以下空格 .然后,您不必将这些字符读入缓冲区 - 而只需使用
getchar()
一次读取字符...