首页 文章

测试用例输出错误

提问于
浏览
-5

对于下面给出的问题,我得到一个大输入(测试用例)的错误答案如何解决这些类型的错误:

给定一个字符串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 回答

  • 1

    scanf("%lld", &l); 不会在数字后丢弃换行符,因此第一个 scanf("%c", ...) 读取的字符是换行符 .

    因此,如果数字正好是 9999 ,它将读取换行符和9998个后续字符,忽略第9999个 .

    修复是在 %lld 之后添加一个空格: scanf("%lld ", &l); ;这将丢弃以下空格 .


    然后,您不必将这些字符读入缓冲区 - 而只需使用 getchar() 一次读取字符...

相关问题