这里发生了啥你不能比较 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 == 'Ä') 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我的程序(c++ 中的 openGL)发生了啥?

有人可以解释一下这里发生了啥吗?存在普遍量化

在 2 个空数组的这个松散相等比较中发生了啥

c++中扩展欧几里得算法的递归到底发生了啥?

C++ 向量初始化:使用这种语法到底发生了啥? [关闭]

这里发生了啥?核心数据/iCloud