#include <stdio.h>
#include <string.h>
#include <conio.h>
char str[100];
int main(void)
{
int i, t, j, len;
printf("Enter string: ");
scanf("%[^\n]ed", str);
len = strlen(str);
str[len] = ' ';
for (t = 0, i = 0; i < strlen(str); i++)
{
if ((str[i] == ' ') && (str[i - 1] == 'd') && (str[i-2]=='e'))
{
for (j = t; j < i; j++)
printf("%c", str[j]);
t = i + 1;
printf("\n");
}
else
{
if (str[i] == ' ')
{
t = i + 1;
}
}
}
}
在用户插入后,该程序应找到以“ed”结尾的单词。如果用户没有插入以ed结尾的单词,则应该打印一条消息,例如“没有带ed的单词”。我试着补充一下:
if ((str[i] == ' ') && (str[i - 1] == 'd') && (str[i-2]=='e')=NULL)
printf("There no words with ed");
但它不起作用。
答案 0 :(得分:3)
在编写任何代码之前,您需要考虑算法的逻辑。如果你想找到以“ed”结尾的单词,那么你显然需要在字符串的末尾搜索,而不是在开头搜索。此外,只有2个字母,它们总是以指定的顺序位于末尾,那么为什么还需要一个循环开始?
此外,如何用{0}初始化i
,然后使用包含i-1
等代码的循环体?
要获取字符串的最后一个字母,您可以这样做:
size_t last_index = strlen(str) - 1; // -1 because C arrays are 0-indexed.
char last_char = str[last_index];
要在此之前获得角色,请使用last_index-1
。然后简单地将这两个字符与“e”和“d”进行比较。不需要循环。
答案 1 :(得分:1)
首先,当输入类似于“我爱你”时,你的scanf("%[^\n]ed", str);
可能无法按预期工作,在这种情况下读入整行,忽略格式字符串中的“ed”
事实上,还有另一种方法可以实现您的要求,这非常简单。
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[100], *substr;
size_t len;
puts("Enter string: ");
fgets(str, 100, stdin);
substr = strtok(str, " ");
while(substr)
{
len = strlen(substr);
if (substr[len - 2] == 'e' && substr[len - 1] == 'd')
puts(substr);
substr = strtok(NULL, " ");
}
}
我认为您自己的代码不会比使用strtok()
的代码更好。请记住,利用标准库函数将使您的生活更轻松。
答案 2 :(得分:-1)
如果你找到了你的比赛,你需要制作一个增加的旗帜;如果你想要匹配的数量;或者只是被设定;如果你只想知道国家。
以下是您的代码,其中包含此标记,名为&#34;找到&#34;,请检查。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char str[100];
int main(void)
{
int i, t, j, len;
int found = 0;
printf("Enter string: ");
scanf("%[^\n]ed", str);
len = strlen(str);
str[len] = ' ';
for (t = 0, i = 0; i < strlen(str); i++)
{
if ((str[i] == ' ') && (str[i - 1] == 'd') && (str[i-2]=='e'))
{
for (j = t; j < i; j++)
printf("%c", str[j]);
t = i + 1;
printf("\n");
found++;
}
else
{
if (str[i] == ' ')
{
t = i + 1;
}
}
}
if(found == 0)
printf("NotFound\r\n");
return 0;
}
另外,我对您的代码发表了评论:
str[len] = ' '
将用&#39;替换字符串NULL终结符。 &#39;这是不可接受的,你应该确保你的字符串数组的最后一个元素是NULL(0)