2016-11-17 216 views
3

我試圖通過用新字符串(toInsert)替換(原始)字符串中的子字符串來插入字符串。 start參數是我想要替換的子串的起始位置。注意:這是一個更大的程序的一部分,但我只是想讓這個功能起作用。將字符串(逐字符)插入較大的字符串

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define ROW 5 
#define COLUMN 81 

void insertString(char original[], int start, int length, char toInsert[]){ 

char buffer[COLUMN]; 
int i = 0; 

for (i=0; i<strlen(original); ++i){ 
    if (i>=start){ 
     buffer[i] = toInsert[i]; 
    } 
    else{ 
     buffer[i] = original[i]; 
    } 
} 

buffer[strlen(buffer)-1] = '\0'; 



printf("%s\n", buffer); 



return; 
} 

int main() 
{ 
char rep[COLUMN] = "very"; 
char sub[COLUMN] = "are"; 

char buf[ROW][COLUMN] = { 
    {"How are you doing"} 


}; 
int len = strlen(sub); 
int start = 4; 

insertString(buf[0], start, len, rep); 



return 0; 
} 

問題是它只打印「如何」。

我希望它打印出「你怎麼做的非常」

而且,我一直在使用strcpy的嘗試,但只是給錯誤/警告(是與指針,我不希望處理指針,因爲我還沒有了解它們。)

+0

嗯,這是很難用字符串沒有處理指針。 ;-) –

+0

啊哈我明白,但有沒有辦法解決這個問題,沒有他們? –

+0

不,你已經在使用字符串了。但是,這並不重要。請解決您的問題,而不使用陣列數組。你不需要那個來描述你的問題。 http://stackoverflow.com/help/mcve –

回答

1

您的函數沒有什麼意義,因爲它不會放大或縮小原始字符串,儘管它必須這樣做。

而且它不確定的行爲,由於這個if語句,因爲當i等於或大於start更大,你可以訪問內存超出使用索引i字符串toInsert

if (i>=start){ 
    buffer[i] = toInsert[i]; 
} 

它是易於編寫用標準C功能的功能。

給你

#include <stdio.h> 
#include <string.h> 

char * replaceString(char *s1, size_t pos, size_t n, const char *s2) 
{ 
    size_t n1 = strlen(s1); 

    if (pos < n1) 
    { 
     size_t n2 = strlen(s2); 

     if (n != n2) 
     { 

      memmove(s1 + pos + n2, s1 + pos + n, n1 - pos - n + 1); 
     } 

     memcpy(s1 + pos, s2, n2); 
    } 

    return s1; 
} 


int main(void) 
{ 
    { 
     char s1[100] = "ab1111cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 4 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "2222"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    return 0; 
} 

程序輸出是

ab22cd 
ab2222cd 
ab22cd 

如果在示範程序中插入的代碼塊

{ 
    char s1[100] = "How are you doing"; 
    const char *s2 = "very"; 

    puts(replaceString(s1, 4, 3 , s2)); 
} 

你會得到輸出

How very you doing 
+0

這將如何使用我的例子? –

+0

沒關係我得到它的工作。再次感謝你。弗拉德這個作品,但希望它會在我的整個計劃 –

+0

您的先生是驚人的,它在我的程序中的作品謝謝 –