Bonjour , existe t'il une fonction qui fait un ou exclusif entre 2 chaines de caractères composées uniquement de 0 et 1?
Je pense qu'il faut d'abord convertir la chaine de caractères en nombres mais après?
Merci
Version imprimable
Bonjour , existe t'il une fonction qui fait un ou exclusif entre 2 chaines de caractères composées uniquement de 0 et 1?
Je pense qu'il faut d'abord convertir la chaine de caractères en nombres mais après?
Merci
l'opérateur ^ permet de faire un ou exclusif.
Petit rappel
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Pour convertir ta chaine tu peux utiliser strtol par exemple
Non il faut l'ecrire soi-même.
Tu veux dire que tes chaînes ne sont composées que de '0' et '1' bien sur...
Comme l'indique ton livre de C, (K&R2, pages 48 et 207) XOR est ^ en C.Citation:
Envoyé par psgman113
8O et XOR (^) ?Citation:
Envoyé par Trap D
Je pense que la question de psgman113 c'est plutôt quelque chose du genre :
Le moyen le plus simple reste de recréer cette fonction xor pour les chaines de caractère. Car convertir en nombre, utiliser le xor "natif" et reconvertir en chaine serait beaucoup plus long et poserait des problèmes par rapport à la longueur des chaines de caractère.Code:
1
2
3
4 char a[] = "01101"; char b[] = "01010"; // faire quelque chose sur a et b pour obtenir la chaine de caratère "00111"
je suis pas certain que ce soit beaucoup plus long que de faire un gros if//else ...Citation:
Envoyé par Celelibi
attention, ce code n'est pas portable. :aie:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { char a[] = "01101"; char b[] = "01010"; char c[6]; int i; for (i = 0; i < strlen (a); i++) { c[i] = (a[i] - '0') ^ (b[i] - '0') + '0'; } c[i] = NULL; printf ("%s\n", c); return 0; }
Pas de problème de longueur si on prend les caractères un par un... et on doit pouvoir s'en sortir en jouans du masquage... mais un if sera tout aussi efficace je pense ...
Citation:
Envoyé par Emmanuel Delahaye
Il parle de chaînes de caractères par d'entiers.Citation:
Envoyé par psgman113
Citation:
Envoyé par Trap D
Ben après, ^.Citation:
Envoyé par P.O.
Donc il faut écrire la fonction qui
CQFD :lol:
- transforme les chaînes en entiers
- calcule le ^ des deux nombres
Pas exemple utiliser strtol() http://man.developpez.com/man3/strtol.3.php en base 2 si la chaîne représente l'entier sous forme binaire. Ensuite, calcul avec XOR (^). CQFDCitation:
Envoyé par Trap D
Thierry
J'ai essayé le ^ avec des caractères ( 0 ou 1) et ca marche aussi!
sinon je voudrais convertir un caractère en chaine de caractères pour utiliser ensuite strtol qui va me convertir ma chaine de caractères en entier.
C'est pour passer d'un caractère écrit en hexadecimal à sa valeur en entier. (j'extrait ce caractère d'une premiere chaine de caractère cle_wep)
mais erreur lors de l'exécution , est ce normal?
Merci
Code:
1
2
3
4
5
6
7
8
9 int k,size_wep; int elem; char* end; char *cle_wep="ABCD"; char *chaine_car; chaine_car[0]=cle_wep[k]; // création de la chaine de caractère à partir du caractère contenu dans ma premier chaine de caractère chaine_car[1]='\0'; int n=strtol(chaine_car, &end, 10);
k n'est pas initialiséCode:chaine_car[0]=cle_wep[k];
mais si , c'est parce que j'ai pas tout copié,
sinon comment convertir un caractère en chaine de caractères; voila ma question
Merci
il faut que tu alloues de la mémoire pour pouvoir faire:Code:char *chaine_car;
sinon, ta méthode fonctionneCode:
1
2 chaine_car[0]=cle_wep[k]; // création de la chaine de caractère à partir du caractère contenu dans ma premier chaine de caractère chaine_car[1]='\0';
Citation:
Envoyé par psgman113
Code:
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> int main (void) { int c = 'A'; char s[2] = {c}; puts(s); return 0; }
Merci beaucoup