需要编写一个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++)代码>