这里发生了啥你不能比较 C++ 中的 if(mychar1 == 'ä' || mychar2 == 'Ä') 吗?
Posted
技术标签:
【中文标题】这里发生了啥你不能比较 C++ 中的 if(mychar1 == \'ä\' || mychar2 == \'Ä\') 吗?【英文标题】:Whats going on here can't you compare if(mychar1 == 'ä' || mychar2 == 'Ä') in C++?这里发生了什么你不能比较 C++ 中的 if(mychar1 == 'ä' || mychar2 == 'Ä') 吗? 【发布时间】:2010-03-23 10:37:06 【问题描述】:我试图比较这两个字符,但在 win 32 Visual Studio 2008 上:
if(mychar1 == 'ä' || mychar2 == 'Ä')
错误:
调试断言失败!
文件:f\dd\vctools\crt_bld\self_x86\crt\src\xstring 1575行
表达式:字符串下标超出范围
【问题讨论】:
我们至少需要看看 mychar1 和 mychar2 是如何定义的... 好吧,有点复杂,它们在小写后作为参数发送: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 == 'Ä ') 我编辑了我的答案,以便它引用此代码。 【参考方案1】:在我的机器上工作:
#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)
之类的东西(或者,在调试版本中,my_str[10]
),其中my_str
只有 10 个字符。由于您显示的代码不访问字符串中的字符,因此错误出现在您未显示的代码中。
编辑:您在对问题的评论中显示的代码确实使用operator[]()
访问字符串中的字符。当你做string2[0]
时,你检查过字符串不为空吗?
【讨论】:
确保您的文件 (.cpp) 保存为 ASCII 或 iso-8859-15 / iso-latin9,而不是 UTF-8 或其他格式。以上是关于这里发生了啥你不能比较 C++ 中的 if(mychar1 == 'ä' || mychar2 == 'Ä') 吗?的主要内容,如果未能解决你的问题,请参考以下文章