将 unicode 字符串与 c ++ 符号进行比较?
Compare unicode string with c ++ sign?
我希望比较后的结果是 1,因为两个字符串完全相同,我不明白为什么这是 0 以及如何处理它?
string s1=""Kilómetro 0,72"";
s1=s1.substr(1,s1.length()-2);
cout<<s1<<endl;
string s2="Kilómetro 0,72";
cout<<s2<<endl;
if(s1==s2) cout<<1;
else cout<<0;
因为你的两个字符串不一样。(请注意重音在s2
中o
的偏移量。这个工作:
#include <string>
#include <iostream>
int main()
{
using namespace std;
string s1=""Kilómetro 0,72"";
s1=s1.substr(1,s1.length()-2);
cout<<s1<<endl;
string s2="Kilómetro 0,72";
cout<<s2<<endl;
if(s1==s2) cout<<1;
else cout<<0;
return 0;
}
您的字符串在视觉上是等效的,但一个使用 ASCIIo
和组合重音(两个 Unicode 代码点 U+006F,U+0301(,另一个使用ó
(一个 Unicode 代码点 U+00F3(。
您需要使用 ICU 等库规范化字符串以正确比较它们,或者至少与您的示例一起,在两个字符串常量中以相同的方式键入组合字符。
在末尾添加以下代码:
for(int i = 0; i < s1.length(); i++) {
cout << (int)(unsigned char)s1[i] << " " << (int)(unsigned char)s2[i] << endl;
}
它会帮助你。
相关文章:
- C++模板函数,用于比较任何无符号整数和有符号整数
- 为什么:不同符号的整数比较只是偶尔发生?
- 将 unicode 字符串与 c ++ 符号进行比较?
- 与 string.size() 比较时 int 的符号性显示警告
- 为什么当我们使用等于'='符号比较器函数时,c ++的内置排序函数不起作用?
- 如何安全地比较两个无符号整数计数器?
- C++ 如何禁用具有不同符号变量比较的特定行的编译器警告?
- 无符号int的比较始终是正确的(NPOS问题?)
- 符号和未签名整数表达式之间的比较,以进行循环误差
- C++编译错误(有符号和无符号整数表达式之间的比较)
- "正确"无符号整数比较
- C++ 有符号和无符号整数表达式之间的比较
- 当字符包含表情符号时如何比较字符?
- std::out_of_range 比较字符串中的符号时出错
- 将无符号的 int 与 std::string::size_type 进行比较是否安全
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- C / C++中无符号整数的减法和比较是否定义良好?
- 有符号和无符号整数表达式之间的比较
- 即使启用了 Wextra,gcc 也不会给出将无符号整数< 0 进行比较的警告
- 重载比较符号"<"时,C++升序排序的正确方法