Bonjour J'apprends le C++ et je veux écrire une fonction simple pour comparer deux chaînes de caractères. J'ai trouvé ce qui suit de K & R2 livre c:Strcmpr faille de la fonction
#include <iostream>
int strcmp(char *s, char *t);
int main() {
char one[] = "Abe\0";
char two[] = "Abee\0";
std::cout << strcmp(one, two) << "\n";
return 0;
}
/* strcmp: return < 0 if s < t, 0 if s == t, >0 if s>t */
int strcmp(char *s, char *t) {
for (; *s == *t; s++, t++) {
if (*s == '\0') {
return 0;
}
return *s - *t;
}
}
Cependant, il ne dit pas à part deux cordes lorsque l'un d'eux est l'autre, plus les caractères supplémentaires après. // comme dans l'exemple ci-dessus
En outre, il met majuscule après minuscule, mais je veux le contraire. J'ai des difficultés à écrire et je me demande si vous pourriez m'aider.
Edit:
char one[] = "abe\0";
char two[] = "Abe\0";
char a = 'a';
char A = 'A';
std::cout << "a" << static_cast<int>(a) << "\n";
std::cout << "A" << static_cast<int>(A) << "\n";
std::cout << strcmp(one, two) << "\n";
Cette impression:
a97
A65
32
32 est> 0 -> cela signifie "abe" est avant "Abe".
Cependant 'A' est de 65 ans et 'a' est 97.
Vous pouvez simplement le remplacer 'retour 0' avec' retour * s - * t', ou peut-être en arrière selon la façon dont vous voulez commander une chaîne plus longue par rapport à une plus courte. –
Le problème est que 'return * s - * t' ne devrait pas être dans la boucle. Vous revenez après la première itération. Vous avez probablement copié le code incorrect. – scohe001
étape par le code avec un débogueur, vous verrez ce qui se passe – pm100