2014-01-21 34 views
-2

我程序和我想要寫一個函數,它有兩個串和一個特定的位置(開始&端),並從開始替換的字符的結束第一個字符串與第二個字符串。所以聲明是這樣的:void replace(char str1[], char str2[], int from, int to);C,插入在一個字符串的字符串在C替換

之所以說它是有點問題的,因爲有時你要插入的字符串比(從 - 到)位置更大,有時是小,因此它並不總是適合完美的。我想到了條件,如if(strlen(str2) > to-from)else if(strlen(str2) < to-from)或正式正規循環,這將是由其他人(因爲它是唯一剩下的選項...)。

你有任何想法應該循環包含哪些內容?

編輯: 我知道了,但有一件事不工作。如果我想插入第一個字符串的字符串小於from和to之間的可能字符串(意思是我需要抹去字符打擾),那麼它不起作用。 被激活,當我要插入的字符串比可能的空間較小的聲明是這樣的:

if(strlen(str2) < to-from+1) 
{ 
    location = from+strlen(str2)+1; 
    j = 0; 
    for (i = from ; i < to && j < strlen(str2) ; i++) 
    { 
     str1[i] = str2[j]; 
     j++; 
    } 
    for(i = location ; i <= to ; i++) 
    { 
     for(j = i ; j <= strlen(str1) ; j++) 
     { 
      str1[j] = str1[j+1]; 
     } 
    } 
} 
+4

請正確格式化您的代碼。 – OldProgrammer

+1

試試'strncpy'? – cdarke

回答

0

正如你正確識別,str2可能不適合分配給str1的空間。

由於您提供的不返回一個新的字符串,或以其他方式允許輸入緩衝區的函數原型被重新分配,我不認爲你想要的東西在所有情況下是可能的。

如果可以的話,我想你應該改變原型:

char* replace(char* str1, char* str2, int from, int to); 

通過改變返回值,你可以返回一個新的緩衝區,調用者必須釋放,這將有結果輸出字符串。

+0

謝謝您的回答,但我知道這將是足夠的,因爲str2是我選擇輸入的字符串,因此它始終處於合適的大小。 –