所以我有这个,我想:
For the word "are":
caramare
aresdn
lasrare
aresare
mare
We have n=3
,因为只有3个单词以我们的特定单词结尾,并且只能包含一次。
如果我读错单词,例如“ ares”,it will break the program.
为什么会这样?
需要从以下位置启动程序:
n=.....;
for(i=1;i<=11;i++)
{ cin>>s; | scanf(“%s”,s);
............
}
这是我尝试过的:
#include <stdio.h>
#include <string.h>
int main()
{
char s[20][20];
int n=0;
int i;
for(i=1;i<=11;i++)
{
scanf("%s",s);
if(strcmp ( strstr("are",s[i]) ,"are") ==0 )
{
n++;
}
}
printf("%d",n);
}
答案 0 :(得分:1)
一个问题是,如果找不到指针,strstr
返回NULL。然后,您将NULL指针传递给strcmp
,这将完全出错。
您需要像这样拆分它:
char* tmp = strstr("are",s[i]);
if (tmp)
{
if (strcmp ( tmp ,"are") ==0 )
{
n++;
}
}
还有这个
char s[20][20];
应为:
char s[20];
并且从不,永远不要做scanf("%s",s);
总是-像总是,总是,总是那样-设置一个限制-像scanf("%19s",s);
这样用户不会溢出您的输入缓冲区。