c - C语言中如何去除字符串末尾多次重复的重复字符?

标签 c string character non-repetitive

我正在尝试学习如何在 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;
}

最佳答案

这是您的代码。 主要问题是j++。您必须保持在相同的 j 直到reverse_string[j] !=reverse_string[i]。 第二个问题是您没有终止字符串。

#include <stdio.h>
#include <string.h>
int main()
{
char word[20];
char reverse_string[20];
printf("type a string: ");
scanf("%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];
  }
  reverse_string[strlen(word)] = '\0'; //add string termination
  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++ was moved. 
    {
        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];
            }

        }
        else
            j++; //j++ was moved here 
    }
  }
   printf("%s\n", reverse_string);

return 0;
}

关于c - C语言中如何去除字符串末尾多次重复的重复字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514453/

相关文章:

c - C中反转字符串的函数

php - 通过单击按钮生成随机字符并将结果安全保存到数据库

c - 输入后 Char 指针(字符串)数组崩溃?

c - 将整数数组转换为字符数组时会发生什么

java - 十六进制字符串到int数组的转换

ruby - 在 Ruby 中从末尾切片字符串

java - Java 中的生日猜测器,代码行无明显原因被跳过

c# - ToUpper() 有时会改变字符 (µ -> M)

c - 为什么程序写DNA时没有空格

c - win32 上的 "struct EVENT_LIST"是什么?