2014-12-05 200 views
0

假设我有字符数组,就像这样替换字符:用字符串或另一个字符

abc def ghi jkl ... 

其中单词由空格分隔只是

我的目标是用我希望的其他字符串(字符)替换所有现有空间。例如:

abcMNPdefQRTghiXYZjkl 

我想到了创建一个名为更换功能可以做到以下几点:

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 
} 

我最初的想法是右移strlen(rep)然后海峡的元素insert rep。

这个想法是否有用,或者还有其他更好的方法吗?

+0

'rep'将会是“长度”1,字节大小1 – 2014-12-05 00:01:34

+0

是的,它应该说'char * rep'。我纠正了它。 – Alex 2014-12-05 00:03:07

+1

我将首先使用带有字符串处理的语言。但是如果你坚持使用C语言,为新字符串分配一个大空间,从旧字符串到新字符一次复制一个字符,在那个时候插入额外字符,然后复制新的字符创建字符串到最终的家。试图“插入”到一个字符串中,我的移动字节只是要求麻烦。 – 2014-12-05 00:07:27

回答

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); 
    } 
} 
+0

干杯! [这](http://pastebin.com/raw.php?i=Nw6y2VFW)就像一个魅力! – Alex 2014-12-05 00:25:14

+0

快乐可以帮忙。然后将答案标记为已接受。 – 2014-12-05 00:30:34

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

海峡必须有足够的空间容纳的strlen(REP)多个字符,或代码将失败。更安全的版本将不得不提供总空间,以便您可以检查并且不要插入太大的内容。或者malloc一个完全新的字符串,并返回新的字符串。

相关问题