je croyais que strcmp renvoyait renvoyait 0 ou 1 (0 lorsque les chaines sont identiques)Envoyé par Médinoc
je croyais que strcmp renvoyait renvoyait 0 ou 1 (0 lorsque les chaines sont identiques)Envoyé par Médinoc
montre moi stp comment tu fais sans.Envoyé par mujigka
selon moi, voila comment ça se passe :
chaine 1 : "hel lo". indice i : 5
chaine 2 : "hello". indice j : 4
Tu es d'accord que i et j ne s'incrémentent pas à la même vitesse. Donc si l'on ne met pas j, ça cloche quelque part (j'ai essayé ) ...
Ben non, strcmp() retourne 0 si les chaînes sont identiques, supérieur à zéro si la première chaîne est "supérieure" à la seconde, inférieur à zéro si la première chaîne est "inférieure" à la seconde.Envoyé par olivier1209
Envoyé par man strcmp() POSIX 2003
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
ok merci même si inferieur/superieur pour une chaine ça fait bizarre !Envoyé par Médinoc
OK, tu as raison et je m'inclineEnvoyé par Médinoc
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++
+
Au contraire, je ne trouve pas cela plus clair...!Envoyé par olivier1209
C'est mieux de définir tes chaînes de caractères sur la pile, dans le corps de main.Envoyé par olivier1209
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++
+
Dans ta fonction inverser, i et j s'incrémentent à la même vitesse:Envoyé par olivier1209
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(i = 0; i < n/2; i++) { c = sz2[i]; sz2[i] = sz2[n-i-1]; sz2[n-i-1] = c; }
"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++
+
Mes commentaires (pas de corrections tant que je vois des globales)Envoyé par olivier1209
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 #include <stdio.h> #include <stdlib.h> #include <string.h> /* -ed- il n'y a aucune raison d'utiliser des globales pour un tel programme... Appendre à utilser les parametres des fonctions... */ char sz1[50], sz2[50]; // chaine de caractere sur lesquelles on travaille => variable globale /* -ed- eviter les commentaires longs en boutde ligne. Illisible... */ int compression (void) // compresse une chaine de caractere { int i, j, n = 0; j = 0; for (i = 0; sz1[i] != 0; i++) n++; for (i = 0; i < n; i++) if (sz1[i] != ' ') { sz2[j] = sz1[i]; j++; } strcpy (sz1, sz2); printf ("apres compression : %s\n", sz2); return 0; } /* -ed- Les globales, je ne peux pas, desole... je viens de vomir sur mon clavier, Merci c'etait un portable... */ int inversion (void) // inverse les caractères d'une chaine : abc=>cba { char c; int i, j, n; n = 0; j = 1; for (i = 0; sz2[i] != 0; i++) n++; for (i = 0; i < n / 2; i++) { c = sz2[i]; sz2[i] = sz2[n - j]; sz2[n - j] = c; j++; } printf ("apres inversion : %s\n", sz2); return 0; } int test_palindrome (void) { if (strcmp (sz1, sz2)) return 0; else return 1; } int main (int argc, char *argv[]) { gets (sz1); /* -ed- Demon ! Cette fonction est un bug. Elle est interdite pour les nouveaux developpements... Utiliser fgets() et penser a retiper proprement le \n... */ compression (); inversion (); if (test_palindrome ()) puts ("c'est un palindrome"); else puts ("ce n'est pas un palindrome"); system ("PAUSE"); return 0; }
Pas de Wi-Fi à la maison : CPL
C'est pas plus illogique queEnvoyé par Médinoc
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 x <- 1 (LDA) x := 1; (Pascal) x = 1; (C) MOV x, #1 (ASM86)
C'est une convention, c'est tout. Evidemment, les farceurs de Freescale (ex-Motorola pour les retardataires) utilisent une convention inverse en assembleur, histoire de se faire remarquer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1 -> x 1 =: x; 1 = x; MOVE #1 x (ASM68k)
Pas de Wi-Fi à la maison : CPL
Faut pas 'croire que'. Faut lire la doc...Envoyé par olivier1209
Pas de Wi-Fi à la maison : CPL
Mot savant pour 'variable locale'...Envoyé par olivier1209
Pas de Wi-Fi à la maison : CPL
Bonjour,
C'est justement à l'occasion d'exercices qu'il faut prendre l'habitude de traiter les problèmes à fond, sinon on a tendance à dire "ceci est un cas extrèmement rare, inutile de prendre la peine de le traiter", sans parler des analyses incomplètes, pour la même raison (je sais bien qu'une analyse véritablement complète n'existe pas toujours, mais souvent elle existe, et n'est pas faite par laxisme et/ou incompétence et/ou manque de rigueur [pléonasme, ça fait partie des incompétences]).Envoyé par olivier1209
Ne rigole pas, c'est tellement fréquent dans nombre de programmes, y compris des gros logiciels commerciaux.
Ce que j'ai précisé correspond aux règles habituelles des palindromes, il faut donc le prendre en compte, et ce n'est pas difficile à greffer sur le noyau déjà écrit.
Si on n'avait pas ça, comment ferais-tu un classement alphabétique ?Envoyé par olivier1209
Compilation sans erreur ne signifie pas programme sans erreur.
L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.
Avec une vraie fonction de classement alphabétique plutôt qu'une fonction qui classe sur le code des caractères (chiffre < majuscule < minuscule < accents)...Envoyé par thewho
Malheureusement, le standard C n'en propose pas.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Avec une combinaison de tolower() et strcmp(), il est facile d'implanter une telle fonction de manière portable. Reste encore le problèmes des accents...Envoyé par Médinoc
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++
+
Bonjour,
Évidemment, mais il faut bien comparer les chaines à un moment donné, et à moins de réécrire la fonction de comparaison...Envoyé par Médinoc
Comment le C standard pourrait-il proposer ça, le traitement dépendant du codage utilisé.
Ben oui, il faut tout ramener à un standard de présentation.Envoyé par mujigka
Le petit exercice pour les palindromes oblige à faire cela, pour ce qui est des parties supprimer les accents, tout passer en minuscules (ou majuscules).
Comme beaucoup (je suppose !), je me suis fait une petite bibliothèque qui prend tout cela en compte.
Mes données provenant à 99.9% (au moins ) de bases de données, j'évite le problème de conversion trop fréquente de chaine d'origine vers chaine servant au classement, en stockant les 2 versions dans la base.
(Pas de problème de taille de la base, jusqu'ici, je n'ai jamais dépassé 1 GB)
Compilation sans erreur ne signifie pas programme sans erreur.
L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.
Désolé pour le clavier ... Je savais que j'aller me faire engueuler ...Envoyé par Emmanuel Delahaye
j'ai essayé de le refaire en enlevant les variables globales, donc en entrant en parametre de chaque fonction les adresses des chaines de caractères.
J'ai quand même un problème à l'exécution ...
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 #include <stdio.h> #include <stdlib.h> #include <string.h> // chaine de caractere sur lesquelles on travaille => variable globale int compression (char *sz1[50],char *sz2[50]) // compresse une chaine de caractere { int i,j,n=0;j=0; for (i=0;*sz1[i]!=0;i++) n++; for (i=0;i<n;i++) if (*sz1[i]!=' ') { *sz2[j]=*sz1[i]; j++; } strcpy(*sz1,*sz2); printf("apres compression : %s\n",*sz2); return 0; } int inversion (char *sz1[50],char *sz2[50]) // inverse les caractères d'une chaine : abc=>cba { char c; int i,j,n; n=0; j=1; for (i=0;*sz2[i]!=0;i++) n++; for(i=0;i<n/2;i++) { c=*sz2[i]; *sz2[i]=*sz2[n-j]; *sz2[n-j]=c; j++; } printf("apres inversion : %s\n\n",*sz2); return 0; } int test_palindrome (char *sz1[50],char *sz2[50]) { return (strcmp(*sz1,*sz2)); } int main(int argc, char *argv[]) { char sz1[50], sz2[50]; fgets(sz1,sizeof(sz1),stdin); compression(&sz1,&sz2); inversion(&sz1,&sz2); if (!(test_palindrome(&sz1,&sz2))) puts("c'est un palindrome"); else puts("ce n'est pas un palindrome"); system("PAUSE"); return 0; }
Bonjour,
L'idée est bonne, et relève d'une bonne conception.Envoyé par olivier1209
MAIS regarde bien comment tu as défini tes paramètres, c'est un joli bug.
Compilation sans erreur ne signifie pas programme sans erreur.
L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.
Envoyé par thewho
Merci
Bah je prend les adresses de mes chaines en parametres ... je pensais que c'était la coutumeEnvoyé par thewho
merde strcpy a peut etre un problème ... je regarde ....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager