0
votes

Comparez la chaîne Unicode avec le signe C ++?

Je veux que le résultat après comparaison soit 1 parce que les deux chaînes sont exactement les mêmes, je ne comprends pas pourquoi c'est 0 et comment le gérer?

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;


0 commentaires

3 Réponses :


1
votes

Parce que vos deux chaînes ne sont pas les mêmes. (Notez le décalage de l'accent sur o dans s2 .) Celui-ci fonctionne:

#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;
}


5 commentaires

Comment comparer les retours true entre string "kilómetro 0.72" lors de la suppression de citations et de la cordon kilómetro 0.72? Merci


@xuhdev Il me manque peut-être quelque chose, mais votre code proposé ressemble au code de problème de l'OP. Mais j'ai testé et cela produit un résultat différent. Veuillez expliquer pourquoi votre réponse fonctionne là où le code de l'OP ne fonctionne pas. Utilisez-vous différents caractères Unicode dans vos littéraux de chaîne?


La version originale de @RemyLebeau OP a un caractère composite en s2 ( lettre minuscule latine o + combinant l'accent aigu ), la version ci-dessus est simplement lettre minuscule latine o avec aigu . Le répondeur aurait probablement dû expliquer cela plutôt que de simplement poster du code mystérieusement fonctionnel!


Notez que le "décalage de l'accent" dépend du navigateur / de la police. Les chaînes de l'OP se ressemblent dans mon navigateur.


@MarkTolonen pareil dans le mien aussi



0
votes

Ajoutez ce code à la fin:

for(int i = 0; i < s1.length(); i++) {
    cout << (int)(unsigned char)s1[i] << " " << (int)(unsigned char)s2[i] << endl;
}

Cela vous aidera.


1 commentaires

Comment comparer les retours true entre string "kilómetro 0.72" lors de la suppression de citations et de la cordon kilómetro 0.72? Merci



1
votes

Vos chaînes sont visuellement équivalentes, mais on utilise ASCII o avec combinaison d'accent (deux points de code Unicode U + 006F, U + 0301) et on utilise ó (un Point de code Unicode U + 00F3).

Vous devez normaliser les chaînes en utilisant une bibliothèque comme ICU pour les comparer correctement, ou du moins avec votre exemple, tapez le caractère de combinaison de la même manière dans les deux constantes de chaîne. < / p>


0 commentaires