我一直在尝试使用c语言从字符串中删除重复的连续字符以进行分配。
输入如下:sheeeiiisccommminng
输出必须如下:sheiscoming
但我得到了输出:sheiscomng
我无法找出问题所在,请提供您宝贵的见解。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char str[100];
int i, j, k, len;
printf("Enter any string: ");
fgets(str, 100, stdin);
len = strlen(str);
for (i = 0; i < len; i++) {
j = i + 1;
k = i + 2;
while (j < len) {
if (str[j] == str[i]) {
j++;
} else {
str[k] = str[j];
k++;
j++;
}
}
len = k;
}
printf("\nString after removing characters:");
for (i = 0; i < len; i++) {
printf("%c", str[i]);
}
}
答案 0 :(得分:2)
您应该在len = k;
循环结束后更新for
字符串的长度。
但是请注意,当您缩短字符串以使其成为正确的C字符串时,您还应该在新长度设置空终止符。
这是一个更简单的版本:
#include <stdio.h>
int main() {
char str[100];
int i, j;
printf("Enter any string: ");
if (fgets(str, sizeof str, stdin)) {
for (i = j = 0; str[i] != '\0'; i++) {
if (j == 0 || str[j - 1] != str[i]) {
str[j] = str[i];
j++;
}
}
str[j] = '\0';
printf("String after removing characters: %s\n", str);
}
return 0;
}
答案 1 :(得分:1)
不确定您的代码,但您可以执行类似
的操作char str[]="sheeeeisssscommmiingg";
int i, j;
for(i=j=0; str[j]; i++)
{
str[i]=str[j];
for(j++; str[j]==str[i]; ++j);
}
str[i]=`\0`;
printf("\n%s", str);
通过外部循环检查字符串中的字符后,使用内部for
循环跳过后续相同的字符。
原始字符串被覆盖。
最后,将nul终止符添加到新字符串的末尾。
另请考虑阅读this。
这种情况下的输出是:
sheiscoming