2010-03-23 52 views
0

我试着去比较这两个字符,但在赢得32 Visual Studio 2008中:这里发生了什么你不能比较如果(mychar1 =='ä'|| mychar2 =='Ä')在C + +?

if(mychar1 == 'ä' || mychar2 == 'Ä') 

Erromess:

调试断言失败!

文件:F \ DD \ vctools \ crt_bld \ self_x86 \ CRT \ SRC \ xstring 1575 线

表达:串标超出范围

+3

更多代码请 – swegi 2010-03-23 10:38:48

+3

我们至少需要看到如何定义mychar1和mychar2 ... – jcoder 2010-03-23 11:02:51

+0

确定其有点复杂,它们在被小写后作为参数发送: 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

回答

6

作品在我的机器上:

#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]时,你是否检查过该字符串不是空的?

+3

确保您的文件(.cpp)保存为ASCII或iso-8859-15/iso-latin9,而不是UTF-8或其他。 – 2010-03-23 11:08:14

相关问题