c - C语言中用一个字符替换字符串中的多个字符

标签 c string replace char c-strings

我需要用一个字符替换几个字符(取决于它们的计数是偶数还是奇数)。如果是偶数,我应该用 P 替换 +,如果是奇数,则用 p 替换。

输入:kjlz++zux+++

while(p[i])
{
    j=i;
    k=i;
    length=strlen(p);

    if(p[i]=='*')
    {
        position=i;
    }
    printf("Position is: %d", position);

    while(p[j]=='*')
    {
        counter++;
        j++;
    }
}

输出:kjlzPzuxp

我不知道如何删除几个字符,我知道如何输入一个。

最佳答案

基本上,您可以保持 text 变量不变,直到找到 +。在这种情况下,您开始计算有多少个连续的加号。一旦知道了这一点,就可以决定是否应该添加字母 P 或 p。保留一个单独的索引来写回您的文本变量!否则,在找到 2 或 3 个加号后,它将开始写入错误的索引,尝试找出原因;)。

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    char text[] = "kjlz++zux+++";
    int len = sizeof(text) / sizeof(text[0]);
    int index = 0, count = 0;

    for(int i = 0; i < len; i++)
    {
        if(text[i] == '+')
        {
            count = 0;
            while(text[i] == '+') i++, count++;
            i--;
            text[index++] = count % 2 ? 'p' : 'P';
        }
        else
        {
            text[index++] = text[i];
        }
    }
    text[index] = 0;
    printf(text);
}

您可以使用ma​​lloctext变量分配空间,以便之后可以使用realloc将数组缩小到输出文本。这样可以节省一些内存,当您开始处理更大的数据 block 时,这一点尤其重要。

关于c - C语言中用一个字符替换字符串中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59312472/

相关文章:

c - 使用 CreateProcess,无法获取 CREATE_NO_WINDOW 来抑制控制台

c - 换页符 (\f) 和垂直制表符 (\v) 在 C 中不起作用

c - 仅打印长度超过 10 个字符的输入行 (ANSI C)

c# - 使用 excel.interop 替换 excel 中的单元格值

Curses - 对标准输入执行非阻塞检查 - C

c - 如何清除gtk、goocanvas表面?

c++ - 我可以用 2 个字符替换字符串中的单个字符吗?

regex - 用于删除 JSTL 标记中的特殊字符的正则表达式

r - 如何根据部分匹配的列合并两个表?

javascript - 比较 2 字符串给出 false 结果,即使它们相同