字符串中第一个单词后如何识别空格?

时间:2018-11-05 18:41:06

标签: c

我创建了一个非常简单的程序,该程序应该与第一个单词(“ abc”)以空格结尾的字符串匹配。例如,如果我写“ abc defg”,则由于“ abc”和空白,我应该收到一个匹配项。如果我写“ abcdefg”,我不应该这样做,因为没有空格。

我想我的第一个解决方案并未真正解决,因为空格根本不是字符(?)。因此,我在IF语句中使用第二个条件创建了下面的第二个解决方案,但是,它也没有解决……

有什么想法可以识别字符串末尾的空格吗?

int main(void) 
{
    while(1)
    {
        char str[30];

        scanf("%s", str);

        char *word = "abc ";      <------------ QUESTION HERE

        // If two first three letters are "abc" + white space
        if(strncmp(str, word, 4) == 0) {

            printf("Match\n");

        } else {

            printf("No match\n");

        }
    }

}

第二个代码:

int main(void) 
{
    while(1)
    {
        char str[30];

        scanf("%s", str);

        char *word = "abc";

        // If two first three letters are "abc" + white space
        if(strncmp(str, word, 3) && (isspace(str[3])) == 0) {

            printf("Match\n");

        } else {

            printf("No match\n");

        }
    }

}

1 个答案:

答案 0 :(得分:1)

  

我想我的第一个解决方案并未真正解决,因为空格根本不是字符(?)

当然空白是一个字符-实际上,一组字符被认为是空白。但是,在scanf方面,空格字符起特殊作用:除少数特殊情况外,它用于分隔用格式字符串解析的输入。

这就是为什么您不会使用"abc "scanf中获得%s的原因:尾随空格总是被忽略,所以两种方法都不起作用。

这将起作用:

char buf[100], ch;
scanf("%99s%c", buf, &ch);
if (strcmp(buf, "abc") == 0 && ch == ' ') {
    printf("Yes!\n");
}

想法是将%s捕获后的字符立即读取为变量,并将该变量与空格字符' '进行比较。

请注意使用%99s将输入的大小限制为缓冲区分配的长度(加上用于空终止符的附加字符)。

Demo.

重要提示:不用说,您需要检查scanf的返回值才能看到所有格式说明符都有一些输入。在上述情况下,您需要检查scanf的返回值是2

相关问题