C语言 删除单词后缀
感觉自己的程序没什么问题,但是运行结果不对,希望大家帮我分析分析。
#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;
}
下面是运行结果:
#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
来存储后缀的长度,并在复制字符串时将其排除在外。
【相关推荐】