gpt4 book ai didi

c - 字符串操作(具有相同输入的变量输出)

转载 作者:行者123 更新时间:2023-11-30 14:48:19 26 4
gpt4 key购买 nike

也许某些属性在我没有注意到的情况下传递,但当“i”为 1 时,它就会卡住。当我输入任何字符串时,“j”变量在不同的执行中变为 700 或 2000。代码的目标是输出重复的字母,如果您输入“cheese”,则输出应为“eee”。我做错了什么?

    #include <stdio.h>
char * repeticoes(char *s) {
int index = 0;

for (int i = 0;( s[i] != '\0'); i++) //problem starts when i is > 0
{
for (int j = 0; ( s[j] != '\0'); j++)
{
if (s[i] == s[j])
{
printf("%c == %c\ni %d j %d\n", s[i], s[j],i,j);
s[index++] = s[i];

}
else
{
printf("not happening %c != %c\ni %d j %d\n", s[i],s[j],i,j);
}
}

}

s[++index] = '\0';
return s;
}

main() {
char input[21];

printf("str 1\n");
fgets(input, 20, stdin);
repeticoes(input);
printf("duplicated letters %s\n", input);

}

最佳答案

您需要在外部循环中处理的字符之后的下一个字符处启动内部循环,否则您将处理同一对字符两次,并在 i = 时对字符自身进行测试= j.

一旦找到匹配项,您还应该立即跳出内循环。您将在外循环的 future 迭代中找到稍后的匹配项。否则,您将再次处理同一对两次。

并且在循环后分配空字符之前不应增加 index。添加重复时它已经增加了。

#include <stdio.h>
char * repeticoes(char *s) {
int index = 0;

for (int i = 0;( s[i] != '\0'); i++) //problem starts when i is > 0
{
for (int j = i+1; ( s[j] != '\0'); j++)
{
if (s[i] == s[j])
{
printf("%c == %c\ni %d j %d\n", s[i], s[j],i,j);
s[index++] = s[i];
break;
}
else
{
printf("not happening %c != %c\ni %d j %d\n", s[i],s[j],i,j);
}
}

}

s[index] = '\0';
return s;
}

int main() {
char input[21];

printf("str 1\n");
fgets(input, 20, stdin);
repeticoes(input);
printf("duplicated letters %s\n", input);

}

关于c - 字符串操作(具有相同输入的变量输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497594/

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