J'ai codé un algorithme de chiffrement César qui semblent travailler dans la plupart des tests, mais échoue sur quelques cas. Plus sur les détails du test sont https://www.hackerrank.com/challenges/caesar-cipher-1Caesar Cipher Code de Flaw
Informations de base: Le chiffrement crypte uniquement les lettres, les symboles, etc restent non cryptés.
échoue sur ce cas:
90
!m-rB`-oN!.W`cLAcVbN/CqSoolII!SImji.!w/`Xu`uZa1TWPRq`uRBtok`xPT`lL-zPTc.BSRIhu..-!.!tcl!-U
62
Où 90 est N (caractères dans la chaîne), deuxième ligne est une chaîne en série s et 62 est k (nombre de rotations de lettres)
Toute idée dans le défaut de mon code sera très apprécié
code:
int main(){
int n;
scanf("%d",&n);
char* s = (char *)malloc(10240 * sizeof(char));
scanf("%s",s);
int k;
scanf("%d",&k);
if (k>26) {
k%=26;
}
int rotation;
for(int i = 0; i<n; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
if((s[i] + k) > 'z') {
rotation = (s[i] - 26) + k;
s[i] = rotation;
} else {
s[i] = s[i]+k;
}
} else if (s[i] >= 'A' && s[i] <= 'Z') {
if((s[i] + k) >= 'Z') {
rotation = (s[i] - 26) + k;
s[i] = rotation;
} else {
s[i] = s[i]+k;
}
}
}
for(int i=0; i<n; i++) {
printf("%c", s[i]);
}
return 0;
}
* Comment * t-il échouer sur ce cas ? S'il vous plaît soyez plus précis. –
Aussi, avez-vous débogué? C'est presque certainement juste une erreur d'indexation "one off". – Carcigenicate
Ce n'est pas le problème, mais 'scanf ("% s ", s);' est vulnérable à un buffer-overflow. La meilleure façon de s'assurer que vous ne faites jamais quelque chose comme ça dans le code de production est de prendre l'habitude de ne jamais faire quelque chose comme ça, même dans les problèmes de jouets. –