A propos de la comparaison de chaîne avec chaîne
-
03-07-2019 - |
Question
J'ai essayé de faire une comparaison caractère par caractère sous le type de chaîne, avec le code suivant:
vector <int> getQuality(string seedTag, vector <string> &MuTag) {
vector <int> Quals;
for (unsigned i = 0; i<MuTag.size(); i++) {
Quals.push_back(-40);
cout << MuTag[i] << " " << seedTag[i] << endl;
if (MuTag[i] == seedTag[i]) { // This line 33 with error
Quals.push_back(40);
}
}
return Quals;
}
Mais pourquoi donne-t-il une telle erreur:
Mycode.cc:33: error: no match for 'operator==' in '(+ MuTag)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::string, _Alloc = std::allocator<std::string>](((long unsigned int)i)) == seedTag. std::basic_string<_CharT, _Traits, _Alloc>::operator[] [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((long unsigned int)i)
Comment puis-je le résoudre?
La solution
Vous essayez de comparer une chaîne (MuTag [i]) à un caractère (seedTag [i]).
Autres conseils
Comme l'a dit Alexander, vous comparez une chaîne et un caractère.
Ce qui est triste, c'est que le compilateur vous a déjà dit cela, à la différence qu'il l'a crypté avec le cryptage ISO-STL-TEMPLATE, qui est plus difficile à lire que perl!
Vous pouvez consulter ce script pour déchiffrer les messages d'erreur C ++ STL.
Je sais que beaucoup d'autres personnes ont donné une réponse à la cause de l'erreur de compilation, alors laissez-moi récapituler et proposer une solution:
seedTag est une chaîne qui, par définition, est une collection ordonnée de caractères. MuTag est défini comme un vecteur de chaînes: une collection ordonnée de chaînes.
Quand vous faites votre comparaison:
MuTag[i] == seedTag[i]
comme d'autres personnes l'ont dit, vous ne comparez pas le même type.
Pour résoudre ce problème:
En apparence, vous souhaitez comparer chacune des valeurs de MuTag avec seedTag. Si tel est effectivement le cas, supprimez simplement le [i] dans "seedTag [i]".
vector <string> & MuTag
est une collection de chaînes, tandis que
string seedTag
est une collection de caractères. Donc, dans votre comparaison
MuTag[i] == seedTag[i]
vous comparez réellement quelque chose comme ceci
"aaaaa" == 'a'
ce qui n’est vraiment pas correct.