Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较unicode字符串与c++;签名_C++_Arrays_String_Utf 8 - Fatal编程技术网

C++ 比较unicode字符串与c++;签名

C++ 比较unicode字符串与c++;签名,c++,arrays,string,utf-8,C++,Arrays,String,Utf 8,我希望比较后的结果是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; string s1=“\'

我希望比较后的结果是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;
string s1=“\'Kilómetro 0,72\”;
s1=s1.substr(1,s1.length()-2);

cout因为你的两个字符串不一样。(注意
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;
}
#包括
#包括
int main()
{
使用名称空间std;
字符串s1=“\”基洛地铁0,72\”;
s1=s1.substr(1,s1.length()-2);

cout因为你的两个字符串不一样。(注意
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;
}
#包括
#包括
int main()
{
使用名称空间std;
字符串s1=“\”基洛地铁0,72\”;
s1=s1.substr(1,s1.length()-2);

cout在末尾添加此代码:

for(int i = 0; i < s1.length(); i++) {
    cout << (int)(unsigned char)s1[i] << " " << (int)(unsigned char)s2[i] << endl;
}
for(int i=0;icout在末尾添加此代码:

for(int i = 0; i < s1.length(); i++) {
    cout << (int)(unsigned char)s1[i] << " " << (int)(unsigned char)s2[i] << endl;
}
for(int i=0;icout您的字符串在视觉上是等效的,但其中一个使用ASCII
o
和组合重音(两个Unicode代码点U+006F,U+0301),另一个使用
o
(一个Unicode代码点U+00F3)


您需要使用一个库来正确比较字符串,或者至少与您的示例一样,在两个字符串常量中以相同的方式键入组合字符。

您的字符串在视觉上是等效的,但一个使用ASCII
o
和组合重音(两个Unicode码点U+006F,U+0301),另一个使用
o
(一个Unicode代码点U+00F3)


您需要使用一个库来正确比较字符串,或者至少与您的示例一样,在两个字符串常量中以相同的方式键入组合字符。

如何在删除引号时比较字符串“Kilómetro 0.72”和字符串Kilómetro 0.72之间的返回值?ThanksHow在字符串之间比较返回值true“Kilómetro 0.72”在删除引号和字符串Kilómetro 0.72时?ThanksHow比较字符串“Kilómetro 0.72”之间的返回值true"删除引号和字符串Kilómetro 0.72时?Thanks@xuhdev也许我遗漏了什么,但你提出的代码看起来与OP的问题代码相同。但我和它确实产生了不同的结果。请详细说明为什么你的答案在OP的代码不起作用的情况下有效。你在字符串文字中使用了不同的Unicode字符吗?@RemyLebeau OP的原始版本在
s2
中有一个复合字符(拉丁文小写字母o+结合锐音),上面的版本只是带锐音的拉丁文小写字母o。也许回答者应该解释这一点,而不仅仅是发布神秘的工作代码!注意“重音偏移”取决于浏览器/字体。OP的字符串在我的浏览器中看起来相同。@MarkTolonen在我的浏览器中相同,Too如何比较字符串“Kilómetro 0.72”之间的返回值true删除引号和字符串Kilómetro 0.72时?Thanks@xuhdev也许我遗漏了什么,但你提出的代码看起来与OP的问题代码相同。但我和它确实产生了不同的结果。请详细说明为什么你的答案在OP的代码不起作用的情况下有效。你在字符串文字中使用了不同的Unicode字符吗?@RemyLebeau OP的原始版本在
s2
中有一个复合字符(拉丁文小写字母o+结合锐音),上面的版本只是带锐音的拉丁文小写字母o。也许回答者应该解释这一点,而不仅仅是发布神秘的工作代码!注意“重音偏移”依赖于浏览器/字体。OP的字符串在我的浏览器中看起来相同。@MarkTolonen在我的浏览器中也一样