2013-02-26 177 views
1

現在,我面臨着這樣一個問題:比較兩個字符串而不使用庫函數中的「strcmp」。如何將字符串輸入到C++中的字符數組?

我已經正確定義了函數「mystrcmp」,但我也必須將輸入的字符串放入字符數組中。我怎麼能意識到它?

這是我的錯誤代碼:

char a1[100],a2[100]; 
int j=0; 
do 
{ 
    cin>>a1[j]; 
    j=j+1; 
}while(getchar()!=10); 
int k=0; 
do 
{ 
    cin>>a2[k]; 
    k=k+1; 
}while(getchar()!=10); 

cout<<j<<" "<<k<<"\n"; 

我想看看,如果循環是通過J和K是正確的。不幸的是,結果是錯誤的。 例如,當我輸入「abcdefg」和「gfedcba」時,我得到結果「j = 4,k = 4」。

我的代碼有什麼問題?我該如何糾正它?

我期待着您的回答。謝謝。

+2

您是否在尋找C++的解決方案? - 你所有的代碼和提及strcmp是C - 廣告將失敗C++的任何代碼審查 – Mark 2013-02-26 12:13:57

+1

請發佈整個功能,而不僅僅是身體。 – StoryTeller 2013-02-26 12:14:54

+0

要10個字符長字符串 – 2013-02-26 12:19:33

回答

1

你爲什麼用你的代碼值10?不要使用整數文字來代替字符常量,因爲當您嘗試在使用EBCDIC字符集的計算機上運行此代碼時,您會注意到'\ n'的值爲37,而不是10.使用'\ n '而不是10.

請勿混用getchar和cin代碼。這是一個非常糟糕的主意,因爲它們每個都消耗一個字符。換句話說,getchar()消耗一個字節,而cin消耗一個字節,所以每個循環消耗兩個字節,只存儲其中一個字節。如果你要使用的getchar,我想你的意思是這樣的:

for (int c = getchar(); c >= 0 && c != '\n'; c = getchar()) { 
    a1[j++] = c; 
} 
a1[j] = '\0'; 

相同的排序使用C++的CIN的事情:

for (int c = cin.get(); cin.good() && c != '\n'; c = cin.get()) { 
    a1[j++] = c; 
} 
a1[j] = '\0'; 
+0

謝謝你的回答。你給了我一個新的想法 - 用int來處理角色。 – 2013-02-27 13:55:27

相關問題