我試着去比較這兩個字符,但在贏得32 Visual Studio 2008中:這裏發生了什麼你不能比較如果(mychar1 =='ä'|| mychar2 =='Ä')在C + +?
if(mychar1 == 'ä' || mychar2 == 'Ä')
Erromess:
調試斷言失敗!
文件:F \ DD \ vctools \ crt_bld \ self_x86 \ CRT \ SRC \ xstring 1575 線
表達:串標超出範圍
我試着去比較這兩個字符,但在贏得32 Visual Studio 2008中:這裏發生了什麼你不能比較如果(mychar1 =='ä'|| mychar2 =='Ä')在C + +?
if(mychar1 == 'ä' || mychar2 == 'Ä')
Erromess:
調試斷言失敗!
文件:F \ DD \ vctools \ crt_bld \ self_x86 \ CRT \ SRC \ xstring 1575 線
表達:串標超出範圍
作品在我的機器上:
#include <iostream>
int main()
{
char mychar1, mychar2;
std::cin >> mychar1 >> mychar2;
if(!std::cin)
return 2;
if(mychar1 == 'ä' || mychar2 == 'Ä')
return 1;
std::cout << "No!\n";
return 0;
}
請注意,您引用的錯誤(「字符串下標超出範圍」)意味着您嘗試訪問字符串中無效索引處的字符。例如my_str.at(10)
(或者在Debug版本中,my_str[10]
),其中my_str
只有10個字符。由於您顯示的代碼不能訪問字符串中的字符,因此錯誤出現在您未顯示的代碼中。
編輯:使用operator[]()
你的問題您的評論顯示的代碼做訪問字符串中的字符。當你做string2[0]
時,你是否檢查過該字符串不是空的?
確保您的文件(.cpp)保存爲ASCII或iso-8859-15/iso-latin9,而不是UTF-8或其他。 – 2010-03-23 11:08:14
更多代碼請 – swegi 2010-03-23 10:38:48
我們至少需要看到如何定義mychar1和mychar2 ... – jcoder 2010-03-23 11:02:51
確定其有點複雜,它們在被小寫後作爲參數發送: std :: transform(string2.begin( ),string2.end(),string2.begin(),std :: tolower); // string3以及 if(caseTrue(string2 [0],string3 [0])) .. caseTrue(char mychar1, char mychar2){ if(mychar1 =='ä'|| mychar2 =='Ä') – 2010-03-23 18:34:23