C语言 删除单词后缀问题

C语言 删除单词后缀
感觉自己的程序没什么问题,但是运行结果不对,希望大家帮我分析分析。

img


下面是我的代码:


#include<stdio.h>
#include<string.h>
int main()
{
    char s[33],t[33];
    int i;
    scanf("%s",s);
    for(i=0;i<strlen(s);i++)
    {
        if(s[strlen(s)-2]=='e'&&s[strlen(s)-1]=='r')//判断不是er后缀,再赋值给t
        break;
        else if(s[strlen(s)-2]=='l'&&s[strlen(s)-1]=='y')//判断不是ly后缀,再赋值给t
        break;
        else if(s[strlen(s)-3]=='i'&&s[strlen(s)-2]=='n'&&s[strlen(s)-1]=='g')//判断不是ing后缀,再赋值给t
        break;
        t[i]=s[i];
        printf("%c",t[i]);
    }
    return 0;
}


 
  

下面是运行结果:

img

img

#include<stdio.h>
#include<string.h>
int main()
{
    char s[33];
    scanf("%s", s);
    int len = strlen(s);
    if (s[strlen(s) - 2] == 'e' && s[strlen(s) - 1] == 'r')//判断不是er后缀,再赋值给t
        s[len - 2] = '\0';
    else if (s[strlen(s) - 2] == 'l' && s[strlen(s) - 1] == 'y')//判断不是ly后缀,再赋值给t
        s[len - 2] = '\0';
    else if (s[strlen(s) - 3] == 'i' && s[strlen(s) - 2] == 'n' && s[strlen(s) - 1] == 'g')//判断不是ing后缀,再赋值给t
        s[len - 3] = '\0';

    printf("%s", s);

    return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
    char s[33],t[33];
    int i;
    scanf("%s",s);
    strcpy(t, s);
    if(strlen(s) > 2 &&s[strlen(s)-2]=='e'&&s[strlen(s)-1]=='r')
    t[strlen(s)-2] = '\0';
    else if(strlen(s) > 2 &&s[strlen(s)-2]=='l'&&s[strlen(s)-1]=='y')
    t[strlen(s)-2] = '\0';
    else if(strlen(s) > 3 &&s[strlen(s)-3]=='i'&&s[strlen(s)-2]=='n'&&s[strlen(s)-1]=='g')
    t[strlen(s)-2] = '\0';
    t[i]=s[i];
    printf("%s",t);
    return 0;
}

【以下回答由 GPT 生成】

你的代码逻辑在判断后缀时存在问题,导致结果不正确。这是因为你在判断后缀时使用了strlen(s)来索引字符,这导致每次循环都重新计算了字符串s的长度,而不是固定使用s长度减去后缀长度。此外,你还需要将判断后的字符添加到字符串t中。

以下是修改后的代码来实现删除单词后缀的功能:

#include<stdio.h>
#include<string.h>

int main()
{
    char s[33], t[33];
    int i;
    scanf("%s", s);

    int len = strlen(s); // 获取字符串s的长度
    int suffixLen = 0; // 后缀的长度

    // 判断是否以er后缀结尾
    if (len >= 2 && s[len-2] == 'e' && s[len-1] == 'r') {
        suffixLen = 2; // 后缀长度为2
    }

    // 判断是否以ly后缀结尾
    else if (len >= 2 && s[len-2] == 'l' && s[len-1] == 'y') {
        suffixLen = 2; // 后缀长度为2
    }

    // 判断是否以ing后缀结尾
    else if (len >= 3 && s[len-3] == 'i' && s[len-2] == 'n' && s[len-1] == 'g') {
        suffixLen = 3; // 后缀长度为3
    }

    // 将非后缀部分复制到t中
    for (i = 0; i < len - suffixLen; i++) {
        t[i] = s[i];
        printf("%c", t[i]);
    }

    t[i] = '\0'; // 添加字符串结束符

    return 0;
}

这样的修改可以确保后缀被正确地删除。这里使用了变量suffixLen来存储后缀的长度,并在复制字符串时将其排除在外。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^