使用c从字符串中删除重复的连续字符

使用c从字符串中删除重复的连续字符,c,C,我一直在尝试使用c语言为赋值从字符串中删除重复的连续字符 输入如下:sheeeiisccomming 输出必须如下所示:sheiscoming 但是我得到了输出:sheiscomng 我无法找出这里出了什么问题,请给出您宝贵的见解 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char str[100]; int i, j, k

我一直在尝试使用c语言为赋值从字符串中删除重复的连续字符

输入如下:
sheeeiisccomming

输出必须如下所示:
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]);
    }
}
#包括
#包括
#包括
void main(){
char-str[100];
int i,j,k,len;
printf(“输入任何字符串:”);
fgets(str,100,stdin);
len=strlen(str);
对于(i=0;i
您应该使用
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;
}
#包括
int main(){
char-str[100];
int i,j;
printf(“输入任何字符串:”);
如果(fgets(str,sizeof str,stdin)){
对于(i=j=0;str[i]!='\0';i++){
如果(j==0 | | str[j-1]!=str[i]){
str[j]=str[i];
j++;
}
}
str[j]='\0';
printf(“删除字符后的字符串:%s\n”,str);
}
返回0;
}

不确定您的代码,但您可以执行以下操作

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终止符被添加到新字符串的末尾

也要考虑阅读。

这种情况下的输出为:

sheiscoming

单回路。很好,非常感谢,非常有用@chqrlie