首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当查找字符串中的数字数时,结果会出错

当查找字符串中的数字数时,结果会出错
EN

Stack Overflow用户
提问于 2016-01-29 15:53:23
回答 1查看 70关注 0票数 3

情况如下:

首先,输入包括第一行中的测试用例数量m,然后是m测试用例。每个测试用例由少于256个字符的字符串组成。字符串可能包含“空格”。我的编程语言是C。

那么,这是我的问题。我在代码中找不到任何问题,我可以完美地运行这个示例,得到正确的结果。然而,当我上传到在线判断系统,它显示“WA(错误的答案)”。

这是我的密码。

代码语言:javascript
运行
复制
#include<stdio.h>

int numberOfDigit(char input[255])
{
    int num = 0;

    for (int i = 0; input[i] != '\0'; i++) {
        if (input[i] >= 48 && input[i] <= 57)
            num++;
    }

    return num;
}

int main()
{
    int numberOfTestCase;
    char input[255];
    int digit[9999];

    scanf("%d", &numberOfTestCase);

    for (int j = 0; j < numberOfTestCase; j++) {
        fseek(stdin, 0, SEEK_END);
        gets(input);
        digit[j] = numberOfDigit(input);
    }

    for (int k = 0; k < numberOfTestCase; k++) {
        printf("%d\n", digit[k]);
    }

    return 0;
} 

我想在我的编码过程中解释一些事情。

因为输入包含空格字符,所以我使用gets()函数,这样就可以在不输入空格的情况下获得字符串。但是,如果我不添加fseek(stdin, 0, SEEK_END);gets()只出现numberOfTestCase-1时间,我在stackOverflow上询问,并被告知fseek(stdin, 0, SEEK_END);可以解决问题,但我不知道为什么。但是当我加上它的时候,这个问题就解决了,但是它在在线判断系统中没有通过测试。

我犯了什么错?

EN

回答 1

Stack Overflow用户

发布于 2016-01-29 16:18:56

如果fgets()看到换行符,它将停止读取输入。此外,for ()可能不会在stdin上工作,而且对您的目的来说也是不必要的。相反,您可以使用fgets()来读取第一行,而不是scanf()。然后可以使用sscanf()读取输入号。

类似于:

代码语言:javascript
运行
复制
fgets(input, sizeof input, stdin);
sscanf(input, "%d", &numberOfTestCase);

for (int j = 0; j < numberOfTestCase; j++) {
    fgets(input, sizeof input, stdin);
    digit[j] = numberOfDigit(input);
}

for (int k = 0; k < numberOfTestCase; k++) {
    printf("%d\n", digit[k]);
}

您还可以使用chracter常量,而不是硬编码的ASCII值,这是更易读和可移植的:

代码语言:javascript
运行
复制
for (int i = 0; input[i] != '\0'; i++) {
    if (input[i] >= '0' && input[i] <= '9')
        num++;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35088613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档