2012-11-05 223 views
0

我在這裏遇到了一些小問題。我只是做了一個小程序來測試我的實際程序。這個想法是用add變量中的字符串替換所有的「(star)here(star)」。但是,當我運行程序時,我的最終答案並不完全正確。這是我的結果: I_have_a_star_which是超級靚替換c字符串中的單詞

I_have_a_star_which超級pretty._That_is_great _I_also_have_a_girlfriendwhich是超級靚

I_have_a_star_which超級pretty._That_is_great _I_also_have_a_girlfriendwhich是超級prett!!

任何想法可能會是什麼問題將不勝感激。

#include<iostream> 
#include<string> 
#include<string.h> 
using namespace std; 

int main () 
{ 
    char array[500] = "I_have_a_star_*here*._That_is_great!_I_also_have_a_girlfriend_*here*!", 
    temp[500], 
    add[500] = "which is super pretty"; 
    int i=0, j=0; 

    while(array[i] != '\0') 
    { 
    if(array[i] != '*') 
    { 
     temp[j]=array[i]; 
     i++; 
     j++; 
    } 
    else 
    { 
     strcat(temp,add); 
     cout << temp << endl; 
     i+=6; 
     j+=strlen(add); 
    } 
    } 

    cout << temp << endl; 

    return 0; 
} 
+0

只是刪除這一行: - > 「的cout <<臨時<< ENDL;」因爲無需在between.check之間打印以下代碼。 – Sandy8086

回答

1

的問題是,你的字符複製到temp數組沒有初始化它或曾經NUL終止它。所以當你打電話給strcat或者試着打印temp的內容時,多餘的垃圾可能會把事情搞砸。在您的while循環之前粘上memset(temp, 0, sizeof(temp)); 或將聲明更改爲temp[500] = ""。或者,您可以在呼叫strcat之前以及剛剛循環之後添加temp[j] = '\0';

0

哥們試試這個...

#include<iostream> 
#include<string> 
#include<string.h> 
using namespace std; 

int main () 
{ 
    char array[500] = "I_have_a_star_*here*._That_is_great!_I_also_have_a_girlfriend_*here*!", 
    temp[500], 
    add[500] = "which is super pretty"; 
    int i=0, j=0; 

while(array[i] != '\0') 
{ 
    if(array[i] != '*') 
    { 
    temp[j]=array[i]; 
    i++; 
    j++; 
} 
else 
{ 
    strcat(temp,add); 
    i+=6; 
    j+=strlen(add); 
} 
} 

cout << temp << endl; 

return 0; 
}