【问题标题】:Parsing an integer in a string解析字符串中的整数
【发布时间】:2021-02-23 06:34:33
【问题描述】:

我试图在字符串中获取一个用空格分隔的整数,我期望的示例输入和输出是:
i : word 1
o : 1

i : word 20
o : 20

我试过这样做:

scanf("word %d", &num);

但它不起作用。
我也试过这个:

scanf("%[^/]*c%d", &num);

scanf("%[^/] %d", &num);

但是,它们都不起作用。谁能给我一个关于如何做到这一点的提示?谢谢

注意:输出整数前面没有空格。

完整代码:

int t, num;
char word[1000];
int arr[100], arr2[100];
fgets(word, 1000, stdin);
scanf("%d", &t);
while(t--){
    scanf("word %d", &num);
    printf("%d\n", num);
}

正如您在上面的示例代码中看到的那样,在输入num 之前,我还接受了更多输入。

【问题讨论】:

  • 由于它们是不同的编程语言,您尝试使用 C 或 C++ 获得解决方案?
  • 是C语言的,抱歉没提
  • 第一个代码应该可以工作。
  • if(scanf("%*s%d", &number) == 1) { ... }
  • @WeatherVane 代码示例在该短语之上,是的,它不适用于经过 OP 测试的解决方案,所以我认为它现在已经完成了。

标签: c io scanf fgets


【解决方案1】:

第一个代码只需要在 scanf 文本序列之前有一个空格,以丢弃之前读取的 stdin 中留下的任何空白字符,但是,您可以进一步改进它以识别错误输入并丢弃它们是这样的:

while(t){
    if(scanf(" word %d", &num) == 1){ //space before word
        printf("%d\n", num);
        t--;
    }
}

但是,如果您想使用该正则表达式说明符,您可以执行以下操作:

while(t){
    if(scanf("%*[^ ]%d", &num)){
        printf("%d\n", num);
        t--;
    }
}

这不仅适用于 word,而且适用于任何其他字符串,只要它只有一个单词,ie 除了结束。

【讨论】:

  • 对不起,它确实有效,但我没有发布整个代码。我的代码在输入数字之前确实接受了其他输入,我已经编辑了我的问题
  • @Gary02,你只需要一个空格,我编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2011-04-03
  • 1970-01-01
  • 2012-08-06
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多