我创建了一个非常简单的程序,该程序应该与第一个单词(“ 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");
}
}
}
答案 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
将输入的大小限制为缓冲区分配的长度(加上用于空终止符的附加字符)。
重要提示:不用说,您需要检查scanf
的返回值才能看到所有格式说明符都有一些输入。在上述情况下,您需要检查scanf
的返回值是2
。