查找字符串的最后一个字母

时间:2016-03-24 08:17:20

标签: c string

#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");

但它不起作用。

3 个答案:

答案 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)