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

时间:2018-06-10 22:06:30

标签: c

我一直在尝试使用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]);
    }
}

2 个答案:

答案 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