【发布时间】:2012-10-05 02:17:29
【问题描述】:
我正在尝试用多个字符替换字符串中的某个字符。这是我正在尝试做的一个示例。
假设我有字符串“aaabaa”
我想将所有出现的字符“b”替换为 5 个“c”。
所以当我完成时,“aaabaa”变成了“aaacccccaa”
我写了以下代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[20] = "aaabaa";
int i, j;
for (i=0; s[i]!= '\0'; i++)
{
if (s[i] == 'b')
{
for (j=0; j<5; j++)
{
s[i+j] = 'c';
}
}
}
printf("%s\n", s);
}
这个函数的输出是“aaaccccc”。它似乎只是用 c 覆盖了最后两个 a。有什么办法可以让最后几个 a 不会被覆盖?
【问题讨论】:
-
你需要
memmove() -
让我们暂时假设字符串中的 每个 char 都是一个 'b'...您的目标缓冲区最好比占用它的字符串长 5 倍调用时间。至少,如果您希望 就地 完成此操作,您需要 对算法进行编码以考虑 缓冲区 的大小(不仅仅是string) 被替换的内容占用。不这样做最终会导致灾难。