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

wbgh16ku  于 2023-04-29  发布在  其他
关注(0)|答案(2)|浏览(147)

如何在C中用一个字符替换多个连续出现的字符?
例如,如果我有char myString[]="??hello?world????",我希望输出为?hello?world?
我找到了this链接,但它替换了特定的模式。但是,如果重复字符的数量是可变的呢?

m1m5dgzv

m1m5dgzv1#

它可以使用一个循环来完成。
给你。

#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;
}

程序输出为

"??hello?world????"
"?hello?world?"

假定不应将空终止字符作为函数的参数提供。否则函数无效并返回相同的字符串。

llew8vvj

llew8vvj2#

以防万一附加答案"??hello?world????"-〉"?helo?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;
}

相关问题