gpt4 book ai didi

c - 从给定单词中删除重复字母

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:35 25 4
gpt4 key购买 nike

我是第一次练习字符串,我正在尝试从给定的单词中删除连续重复的字母并打印出来。说这个词是 committee,输出将是 comite。

我的逻辑是比较给定单词中的连续字母,如果不相同,则将这些字母存储到另一个字符串中。

当我编译并运行我的代码时,我得到了奇怪的符号。我的代码有什么错误?

#include<stdio.h>
#include<string.h>
int main()
{
char word[20],modword[20];
int i=0,j=0;
gets(word);
for (i=0;i<20;i++)
{
if (word[i]!=word[i++])
{
modword[j]=word[i];
j++;
}

}
puts(modword);
return 0;
}

最佳答案

  • word[i]!=word[i++] 调用未定义的行为。直观的解释是因为 word[i]word[i++] 没有指定是否先求值,求值顺序会改变访问哪个元素。
  • 避免使用具有自动存储持续时间的未初始化变量的值,这是不确定的,否则您将调用未定义的行为

试试这个:

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

#define MAX_LENGTH 20

int main(void)
{
char word[MAX_LENGTH + 1],modword[MAX_LENGTH], *lf;
int i=0,j=0;
fgets(word, sizeof(word), stdin);
if ((lf = strchr(word, '\n')) != NULL) *lf = '\0';
for (i=0;i<MAX_LENGTH;i++)
{
if (i == 0 || word[i-1]!=word[i])
{
modword[j]=word[i];
if (word[i] == '\0') break;
j++;
}

}
puts(modword);
return 0;
}

积分:

  • 避免使用 gets() 以避免缓冲区溢出。
  • 使用魔数(Magic Number)不是一个好主意。
  • 循环中i 没有递增。由于短路评估,word[i-1] 不会在 i == 0 时被评估。
  • 当到达终止空字符时停止循环。

关于c - 从给定单词中删除重复字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36617071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com