对于下面给出的问题,我得到一个大输入(测试用例)的错误答案如何解决这些类型的错误:
给定一个字符串S,找到该数字的总数 数字。
输入
第一行包含T,即测试用例的数量。第一行 每个testc ase将包含一个整数N,长度为 字符串。每个测试用例的第二行将包含 一个长度为N的字符串S.
输出
对于每个测试用例,输出总数 出现在字符串中。
约束
0< T< 200
0&lt; N <10000
示例输入
1 26 sadw96aeafae4awdw2wd100awd
示例输出
4
代码
#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;
}
答案 0 :(得分:1)
scanf("%lld", &l);
在号码之后不会丢弃换行符,因此第一个scanf("%c", ...)
读取的字符是换行符。
因此,如果数字正好是9999
,则会读取换行符和9998个字符,忽略第9999个。
修复方法是在%lld
之后添加空格:scanf("%lld ", &l);
;这将丢弃以下空格。
然后,你不必须将这些字符读入缓冲区 - 而只是使用getchar()
一次读取字符...