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
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...
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Comme l'indique ton livre de C, (K&R2, pages 48 et 207) XOR est ^ en C.Envoyé par psgman113
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...Envoyé par Celelibi
attention, ce code n'est pas portable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...
Envoyé par Emmanuel Delahaye
Il parle de chaînes de caractères par d'entiers.Envoyé par psgman113
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Envoyé par Trap D
Ben après, ^.Envoyé par P.O.
Donc il faut écrire la fonction qui
CQFD
- transforme les chaînes en entiers
- calcule le ^ des deux nombres
![]()
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
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 (^). CQFDEnvoyé par Trap D
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part char *chaine_car;
sinon, ta méthode fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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';
Envoyé par psgman113
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager