0
votes

Comment comparer deux chaînes qui sont différentes tailles

permet de dire simplement une chaîne a = "abcdef" code>, string b = "abc" code>

est là un moyen de comparer ces deux caractères de caractères par caractère? P>

Par exemple: Disons que vous vouliez itérer à travers chaque chaîne, P>

 for(size of strings)
 if(A.at(i) == B.at(i)
 {
   do something
 }
 else
 {
   do something else
 }


9 commentaires

Typiquement, si les chaînes sont de différentes tailles, elles ne sont pas identiques et vous avez terminé.


Vous pouvez aussi le faire dans une boucle. La question est la suivante: quel est le résultat de la comparaison que vous attendez? égal / non égal? Moins / égal / plus grand?


Parlons-nous d'un C ++ STD :: String ou un bon tableau de caractères terminé par NULL de style C?


a ajouté des choses à la question pour que cela soit plus clair. Fondamentalement, tu veux savoir comment comparer deux chaînes de taille inégale.


Je parlais d'une chaîne C ++ mais la matrice de charme de style C serait bien aussi


@Nickhalden ne peut pas faire a == b directement?


Ensuite, faites juste a .


Je ne comprends pas. Comme d'autres l'ont mentionné, s'ils n'ont pas la même taille, ils ne sont pas les mêmes. Peut-être pouvez-vous expliquer pourquoi vous devez comparer différentes taches de taille? Alors peut-être que je pourrais mieux comprendre.


Clarifier la question. " Voulez-vous juste savoir comment comparer deux chaînes de taille inégale " - OK, et quel est le résultat attendu lors de la comparaison A avec AA ?


3 Réponses :


1
votes

Vous ne pouviez pas le faire dans une boucle car ils sont des tailles différentes,

Vous pouvez absolument le faire dans une boucle. Vous pouvez utiliser l'algorithme suivant:

  • Comparez les longueurs des chaînes
  • stocker la longueur plus courte dans n
  • do n itérations en boucle
  • Décidez ce que vous voulez faire avec le reste de la chaîne longue

0 commentaires

0
votes

Vous pouvez également jeter un coup d'œil à quelque chose comme std :: lexogphal_compare Code> . Il est utilisé pour trier les mots comme ils seraient triés dans le dictionnaire. Si vous souhaitez vous assurer que les caractères eux-mêmes sont triés dans un ordre différent, vous pouvez fournir une fonction qui fait cette comparaison. Par exemple, imaginons que vous voulez qu'une lettre "C" soit effectivement triée en tant que "K". Vous pouvez accomplir de la manière suivante:

bool comp(char c1, char c2)
{
  c1 = std::tolower(c1);
  c2 = std::tolower(c2);
  c1 = (c1=='c') ? 'k' : c1;
  c2 = (c2=='c') ? 'k' : c2;
  return c1 < c2;
}

// main.cpp
std::string str1 = "string c";
std::string str2 = "string d";
std::string str3 = "string k";

std::cout << std::boolalpha;
std::cout << str1 << ( std::lexographical_compare(str1, str2, comp) ? "<" : ">=" ) << str2 << std::endl;
std::cout << str1 << ( std::lexographical_compare(str1, str3, comp) ? "<" : ">=" ) << str3 << std::endl;
std::cout << str2 << ( std::lexographical_compare(str2, str3, comp) ? "<" : ">=" ) << str3 << std::endl;


0 commentaires

0
votes

Si vous utilisez STD :: String, pour la comparaison, vous pouvez utiliser la fonction code> CODE> Fonction ou utiliser des opérateurs relationnels, fournie avec cette classe.

bool equal = true;
if (str1.length() != str2.length())
     equal = false;
else 
     for (int i = 0; equal && i < str1.length(); i++) 
        if (str1.at(i) != str2.at(i) 
           equal = false;


0 commentaires