首页 > 解决方案 > 如何去除C语言字符串末尾重复多次的重复字符?

问题描述

我正在尝试学习如何在 C 中使用字符串,但我遇到了这个问题,我需要反转一个字符串并在没有任何重复字符的情况下打印它。我已经尝试了下面的代码并且它有效,但是如果我添加许多相同类型的重复字符,它就不起作用。

例如:dodon - nodod - nod但使用字符串dodoneeee - eeeenodod - eenode仍然重复。

代码如下:

#include <stdio.h>
#include <string.h>
int main(){
char word[20];
char reverse_string[20];
printf("type a string: ");
scanf("\n%s", word);       
for(int i = strlen(word)-1; i>=0; i--)
{
    // 5 - 5 = 0
    // 5- 4 = 1
    // 5- 3 = 2
    // 5- 2 = 3
    // 5- 1 = 4
    // 5- 0 = 5
    reverse_string[(strlen(word)-1)-i] = word[i];         
  }
  printf("%s\n",reverse_string);     
 for(int i = 0; i< strlen(reverse_string)-1;i++)
 {
    for(int j = i+1; reverse_string[j] != '\0';j++)
    {
        if(reverse_string[j] == reverse_string[i])
        {
            for(int k = j; reverse_string[k] != '\0'; k++)
            {
                //printf("%c\n", reverse_string[k+1]);
                reverse_string[k] = reverse_string[k + 1];
            }                
        }           
    }        
  }
   printf("%s\n", reverse_string);    
return 0;
}

标签: cstringcharacternon-repetitive

解决方案


在下面的行中, k 将两次停留在同一字符的末尾。如果 k 为 4 且 end 为 5,则第 4 和第 5 个字符将相同。一个问题是当 k 为空字符时, k + 1 将覆盖空字符。

 reverse_string[k] = reverse_string[k + 1];

推荐阅读