用字符串或其他字符替换char

时间:2014-12-05 00:00:09

标签: c arrays string char format

假设我有一组字符,就像这样:

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),然后插入代表。

这个想法有什么用,还是有其他更好的方法?

2 个答案:

答案 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一个全新的字符串,并返回新的字符串。