C 如何识别字符串中第一个单词后的空格?
我创建了一个非常简单的程序,它应该匹配第一个单词(“abc”)以空格结尾的字符串。例如,如果我写“abc defg”,我应该会收到一个匹配,因为“abc”和空白。如果我写“abcdefg”,我不应该写,因为没有空格 我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)。因此,我在IF语句中使用第二个条件创建了下面的第二个解决方案,但是,它也不起作用 知道如何识别字符串末尾的空格吗C 如何识别字符串中第一个单词后的空格?,c,C,我创建了一个非常简单的程序,它应该匹配第一个单词(“abc”)以空格结尾的字符串。例如,如果我写“abc defg”,我应该会收到一个匹配,因为“abc”和空白。如果我写“abcdefg”,我不应该写,因为没有空格 我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)。因此,我在IF语句中使用第二个条件创建了下面的第二个解决方案,但是,它也不起作用 知道如何识别字符串末尾的空格吗 int main(void) { while(1) { char st
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");
}
}
}
我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)
当然,空白是一个字符-事实上,一组字符被认为是空白。但是,对于scanf
,空格字符起着特殊的作用:除了少数特殊情况外,它用于分离使用格式字符串解析的输入
这就是为什么您不能使用%s
从scanf
中获取“abc”
:尾部的空格将始终被忽略,因此这两种方法都不起作用
这将有助于:
char buf[100], ch;
scanf("%99s%c", buf, &ch);
if (strcmp(buf, "abc") == 0 && ch == ' ') {
printf("Yes!\n");
}
其思想是在%s
捕获到变量后立即读取字符,并将该变量与空格字符'
进行比较
注意使用%99s
将输入的大小限制为缓冲区的分配长度(加上空终止符的附加字符)
重要提示:不言而喻,您需要检查
scanf
的返回值,以查看是否存在针对所有格式说明符的一些输入。在上述情况下,您需要检查scanf
的返回值是否为2
尝试此printf(“str=\%s\“\n”,str)
第二个解决方案中的abc[3]
是什么,不应该是isspace(str[3])
?顺便说一句:scanf(“%s”…
将不会在空白处读取,但将在Forestephan:是的,我更改了它之前停止读取。Tormund:将尝试并返回。您应该检查scanf返回代码的可能重复项;如果输入中没有空白,您将比较未初始化的值(或者两个,如果输入为EOF)。非常感谢!)事实上,当我用单引号('abc')代替双引号时,我甚至成功地隔离了问题,但最终我没有将解决方案转移到这个特定的函数中。我想这是幸运的,因为我不知道我在做什么…@rici对,我在底部加了一个便条提到这一点。谢谢大家!@Lavonen在多个字符周围使用单引号,如'abc'
,这是您很少需要的。感谢您的帮助:)
char buf[100], ch;
scanf("%99s%c", buf, &ch);
if (strcmp(buf, "abc") == 0 && ch == ' ') {
printf("Yes!\n");
}