需要编写一个C程序来删除彼此相邻的重复字符

需要编写一个C程序来删除彼此相邻的重复字符,c,arrays,string,pointers,char,C,Arrays,String,Pointers,Char,我只需要删除彼此相邻的重复字符 示例:如果输入为“heeelloooorlldd”,则输出应为“helo world”。我目前得到的输出是“helo wrd” 这是我的密码 #include <stdio.h> #include <string.h> main() { char str[]="heeello wooorld"; redundant(str); } void redundant(char *str) { int check=0;

我只需要删除彼此相邻的重复字符

示例:如果输入为
“heeelloooorlldd”
,则输出应为
“helo world”
。我目前得到的输出是“helo wrd”

这是我的密码

#include <stdio.h>
#include <string.h>

main()
{
    char str[]="heeello wooorld";
    redundant(str);
}

void redundant(char *str)
{
    int check=0;
    int i,j;
    char ch;

    while(str[check]) 
    {
        ch = str[check];
        i = j = check + 1;

        while(str[i]) 
        {
            if(str[i] != ch) 
            {
                str[j] = str[i];
                j++; 
            }

            i++; 
        }

        str[j]='\0';
        check++;
    }

    printf("String after removing duplicates : %s\n",str);
} 
#包括
#包括
main()
{
char str[]=“heeello wooorld”;
冗余(str);
}
无效冗余(字符*str)
{
整数检查=0;
int i,j;
char ch;
while(str[检查])
{
ch=str[check];
i=j=检查+1;
while(str[i])
{
if(str[i]!=ch)
{
str[j]=str[i];
j++;
}
i++;
}
str[j]='\0';
check++;
}
printf(“删除重复项后的字符串:%s\n”,str);
} 

发生的情况是,代码中的一个字符被提取,然后检查整个字符串是否再次出现相同的字符。如果出现相同的字符,则会将其删除。因此,您的程序只有每个字符的一个副本,而不是删除相邻的相同字符

请尝试以下代码:

#include<stdio.h>    
#include<string.h>
#include <stdio.h>
 #include <conio.h>
void redundant(char *);
main()
{
 clrscr();
 char str[]="heeello wooorld";
 redundant(str);
 getch();
 }

void redundant(char *str)
  {
 int check=0;
 int i,j;
 char ch;
 while(str[check]) {
 j=i=check;
 ch= str[check+1];
 if(str[check] == ch)
   {
    i++;
   check--;
    }
 while(str[i]) {
 str[j] = str[i];
 j++;
 i++;
 }
 str[j]='\0';   
 check++;
 }
 printf("String after removing duplicates : %s\n",str);
}

发生的情况是,代码中的一个字符被提取,然后检查整个字符串是否再次出现相同的字符。如果出现,则删除该字符。因此,程序中每个字符只有一个副本,而不是删除相邻的相同字符

请尝试以下代码:

#include<stdio.h>    
#include<string.h>
#include <stdio.h>
 #include <conio.h>
void redundant(char *);
main()
{
 clrscr();
 char str[]="heeello wooorld";
 redundant(str);
 getch();
 }

void redundant(char *str)
  {
 int check=0;
 int i,j;
 char ch;
 while(str[check]) {
 j=i=check;
 ch= str[check+1];
 if(str[check] == ch)
   {
    i++;
   check--;
    }
 while(str[i]) {
 str[j] = str[i];
 j++;
 i++;
 }
 str[j]='\0';   
 check++;
 }
 printf("String after removing duplicates : %s\n",str);
}

我在寻找一个最简单的解决方案。只是为了好玩

void redundant(char *str) {
    int lastch = -1;         /* last read character */
    char* inpp = str;        /* pointer to input location */
    char* outp = str;        /* pointer to output location */
    while (*inpp != '\0') {
        if (*inpp != lastch) {
            *outp++ = lastch = *inpp;
        }
        inpp++;
    }
    *outp = '\0';
    printf("String after removing duplicates : %s\n", str);
}  

我在寻找一个最简单的解决方案。只是为了好玩

void redundant(char *str) {
    int lastch = -1;         /* last read character */
    char* inpp = str;        /* pointer to input location */
    char* outp = str;        /* pointer to output location */
    while (*inpp != '\0') {
        if (*inpp != lastch) {
            *outp++ = lastch = *inpp;
        }
        inpp++;
    }
    *outp = '\0';
    printf("String after removing duplicates : %s\n", str);
}  

如果您已经在这方面工作了一段时间,那么请显示您迄今为止的代码。
我已经在这方面工作了一段时间
那么您必须有一些代码与我们共享。请至少检查和@RickS我已经添加了代码。请看一看。该代码用于删除重复的字符,但我需要删除相邻重复的字符。在不查看代码的情况下,我注意到
o
l
中的第二个序列都被错误删除,所以我想你需要在某个地方重置计数器或标志。如果你已经在这方面工作了一段时间,那么展示你迄今为止的代码。
我已经在这方面工作了一段时间
,那么你必须有一些代码与我们共享。至少检查一下,@RickS我已经添加了代码。请看一看。该代码用于删除重复的字符,但我需要删除相邻重复的字符。在不查看代码的情况下,我注意到
o
l
中的第二个系列都被错误删除,因此我想您需要在某个地方重置计数器或标志。谢谢Sourav。成功了。我一直在尝试着做同样的事情,但没能做到。再次感谢。我真的很感激。您可以使用strcat函数跳过第二个while循环,从而大大缩短代码长度@维纳伊苏拉夫。成功了。我一直在尝试着做同样的事情,但没能做到。再次感谢。我真的很感激。您可以使用strcat函数跳过第二个while循环,从而大大缩短代码长度@用于(大小i=0,j=0;(s[j]=s[i]);j+=s[i+1]!=s[i],i++)的Vinay
用于(大小i=0,j=0;(s[j]=s[i]);j+=s[i+1]!=s[i],i++)