假设我有一组字符,就像这样:
abc def ghi jkl ...
其中单词用空格分隔 。
我的目标是用我希望的其他字符串(字符)替换所有现有空格。例如:
abcMNPdefQRTghiXYZjkl
我考虑过创建一个名为 replace 的函数,它可以执行以下操作:
void replace(char *str, int pos, char *rep)
{
//get length of rep
//pos = position of the blank which i want to replace with rep
//code to do the replacement
}
我最初的想法是将 str 的元素向右移动strlen(rep)
,然后插入代表。
这个想法有什么用,还是有其他更好的方法?
答案 0 :(得分:1)
//replace specified chunks in a string (size-independent, just remember about memory)
void replcnks(char *str, char *cnk1, char *cnk2)
{
char *pos;
int clen1 = strlen(cnk1), clen2 = strlen(cnk2);
while(pos = strstr(str, cnk1))
{
memmove(pos + clen2, pos + clen1, strlen(pos) - clen1 + 1);
memcpy(pos, cnk2, clen2);
}
}
答案 1 :(得分:1)
另一种方式 - 就像Michal.z假设pos的版本一样不安全是基于零的位置:
void replace(char *str, int pos, char *rep)
{
char *tmp=strdup(&str[pos+1]);
strcat(&str[pos], rep);
strcat(str, tmp);
free(tmp);
}
str必须有足够的空间来容纳strlen(rep)更多字符,否则代码将失败。更安全的版本将需要总空间可用,因此您可以检查并且不要插入太大的东西。或者malloc一个全新的字符串,并返回新的字符串。