C-将字符的多个连续出现替换为单个出现

C-将字符的多个连续出现替换为单个出现,c,string,function,char,c-strings,C,String,Function,Char,C Strings,如何用C语言中的单个字符替换一个字符的多个连续出现 例如,如果我有一个char myString[]=“?hello?world???”我希望输出为?hello?world? 我找到了链接,但它替换了特定的模式。但是,如果重复字符的数量可变怎么办?可以使用一个循环来完成 给你 #include <stdio.h> char * remove_duplicates( char *s, char c ) { for ( char *p = s, *q = s; *q; )

如何用C语言中的单个字符替换一个字符的多个连续出现

例如,如果我有一个
char myString[]=“?hello?world???”
我希望输出为
?hello?world?


我找到了链接,但它替换了特定的模式。但是,如果重复字符的数量可变怎么办?

可以使用一个循环来完成

给你

#include <stdio.h>

char * remove_duplicates( char *s, char c )
{
    for ( char *p = s, *q = s; *q; )
    {
        if ( *++q != c || *p != c )
        {
            *++p = *q;
        }
    }

    return s;
}

int main(void) 
{
    char s[] = "??hello?world????";

    printf( "\"%s\"\n", s );
    printf( "\"%s\"\n", remove_duplicates( s, '?' ) );

    return 0;
}

假定不应将null终止字符作为函数的参数提供。否则,该函数将不起作用,并返回相同的字符串。

以防万一
“?你好?世界?”
->
“?你好?世界?”

#包括
#包括
int main()
{
char myString[]=“你好?世界?”;
int i,j,length=strlen(myString);
字符大小[长度];
char-prev;

对于(i=0,j=0),你尝试了什么,以及它是如何失败的?请刷新,以及。请尝试创建一个尝试向我们展示,描述你使用它的问题。你会把“L”当作“hello”中的重复字符吗?
"??hello?world????"
"?hello?world?"
#include <stdio.h>
#include<string.h>
int main()
{
    char myString[]="??hello?world????";
    int i,j,length=strlen(myString);
    char res[length];
    char prev;
    for(i=0,j=0;i<=length;i++)
    {
        if(i==0)
        {
            prev=myString[i];
            res[j]=prev;
            j++;
        }
        else
        {
            if(prev!=myString[i])
            {

                res[j]=myString[i];
                prev=res[j];
                j++;
            }
        }
    }
    printf("%s",res);
    return 0;
}