strchr - C - Programmation
Marsh Posté le 28-05-2004 à 16:09:10
et bien tu recommences à partir de la position+1 que te renvoie strchr, si tant es que cette position soit valide
Marsh Posté le 28-05-2004 à 16:14:07
euh du genre :
Code :
|
pour la deuxième occurence de "-" ???
Marsh Posté le 28-05-2004 à 16:31:04
...
déjà avec ça tu perds le début de ta chaine ?
pour la deuxième occurence ? ben cherches un peu quand, meêm faut pas déconner, surtout que pour chercher un simple caractère ...
Marsh Posté le 29-05-2004 à 09:13:37
sans regarder le prototype, je suppose que strstr te renvoie l'adresse de la premier occurence dans un pointeur ....
et bien tu fais une première execution
adr = strchr (adr, "-" );
tu teste si tu as trouvé "-" sur l'objet que l'on pointe 1 première fois
if (*adr == "-" )
{
printf("j'ai trouve l\'occurence de \"-\"" );
/*comme t'as dis taz, tu recommences a partir de la position p+1*/
adr = strchr (adr+1, "-" );
if (*adr == "-" )
printf("j'ai trouve l\'occurence de \"-\" une deuxieme fois" );
else
printf("j'ai trouve qu\"une fois" );
}
else
printf("je n\'ai pas trouve \"-\"" );
voila je pense que l'on peux faire comme ca, voila l'idée
PS : par contre dans les printf je sais pas trop comment faire afficher les simples et double quote, je sais pas s'il suffit de mettre un \, mais ca c'est pas grave tu peux eviter ...
Marsh Posté le 29-05-2004 à 13:16:53
avec le code de weed jimagine ce quil va nous faire qd y faudra trouver les 5 ere occurences
Marsh Posté le 29-05-2004 à 13:22:02
j'ai été au plus simple
sinon pour trouver la 5ème occurence, en effet il faudrait mettre une boucle for pour repeeter 5 fois ...
c ca que vous ne trouvez pas optimisé
Marsh Posté le 29-05-2004 à 13:24:13
red faction a écrit : avec le code de weed jimagine ce quil va nous faire qd y faudra trouver les 5 ere occurences |
ouais, ben s'il trouve quelque chose vous m'appeler
Marsh Posté le 29-05-2004 à 13:28:17
oki, ca n'a pas l'air de bien fonctionner alors
j'ai essayer de faire ca vite fais
mais apparrement non c'est pas bon du tout
Marsh Posté le 29-05-2004 à 13:32:44
le problème c'est que strstr retourne NULL ou un pointeur sur le premier caractère de la sous chaine
donc tes if (*adr == "-" ) seront toujours vrais à moins de segfaulter
Marsh Posté le 29-05-2004 à 13:41:24
"VALEUR RENVOYÉE
La fonction strstr() renvoie un pointeur sur le début de la sous-
chaîne, ou NULL si celle-ci n'est pas trouvée."
en effet tu as raison, alors on peux tester si on pointe vers null ou pas. Si c'est pas NULL on cherche la 2ème occurence et si c'est pas null, on arrete de chercher.
Marsh Posté le 01-06-2004 à 11:51:58
Bon j'ai fait ca :
Code :
|
En fait j'ai des chaine de caractere du genre :
Code :
|
donc je charge les lignes du fichiers une par une et je dois récuperer le deuxieme nombre (entre les "-" ).
malheureusement ca plante au milieu ...
quelqu'un pour m'aider
merci
Marsh Posté le 01-06-2004 à 16:10:57
le nombre de tirets est toujours fixe ? car dans ce cas, un simple sscanf suffirait je pense.
Marsh Posté le 01-06-2004 à 18:20:35
si les tailles restent costantes tu fais juste :
Code :
|
dans nb il y a ton 2e nombre
pour le test des ereurs tu gere par contre, la c'est juste la base... Sinon tu fais une boucle et tu teste ( buf == '-' )
Marsh Posté le 01-06-2004 à 19:17:29
Généralement, si le ou les fichiers ne sont pas trop volumineux, il est préférable de les charger une bonne fois pour toute en mémoire via open() et read() (sans passer par les f*) , et de travailler sur le buffer de lecture.
Marsh Posté le 01-06-2004 à 19:30:20
vous savez toujours pas lire un man, c'est affligeant. pour le reste, il vaut toujours mieux utiliser les FILE* à cause de leur bufferisation. tout charger avec un seul read, ça marche, mais c'est assez marginale, et pour des ploucs (:D) on va éviter tant ce peu de promener un pointeur le long d'un gros buffer
Marsh Posté le 01-06-2004 à 19:41:12
Tout lire avec les FILE * et leur bufferisation n'est pas la solution usuelle, si ce n'est pour des prototypes ou des codes d'étudiants.
Autant faire les choses propres du premier coup.
Pourquoi pas le fgetc() tant qu'on y est ? (comme dans certains outils de compression/décompresion).
Le seul intérêt de la stdio peut être le fprintf et son atomicité à la ligne (et encore, avec un max).
Quant au terme "PLOUC", il me semble qu'il faut savoir rester humble devant le C et la culture informatique en générale.
Marsh Posté le 02-06-2004 à 01:31:56
oula vous prenez un peu la tete je pense
il faut pas oublier pas le meme niveau que vous donc niveau perf on s'en fou un peu ....
enfin bon si vous me cherchez, je suis dehors
Marsh Posté le 02-06-2004 à 10:06:54
bon le nombre de tirets n'est pas toujours fixe et les tailles ne sont pas constantes donc vos solutions ne s'appliquaient pas à mon cas ...
Mais j'ai trouvé mon bonheur avec strtok donc mon problème est solutionné.
Merci encore
Marsh Posté le 02-06-2004 à 14:54:38
de toute facon la question est pas la car avec fread on peut aussi choisir le nombre d'octets a lire, c'est juste que c'est plus simple a comprendre read au debut...
Et au fait les pro, si vous en etes, vous l'avez toujours pas prouvé, personne a su répondre a toutes les question posé sur le focus et l'ecran.
Marsh Posté le 03-06-2004 à 16:52:41
j'ai un autre problème
j'ai une ligne de ce type là :
Code :
|
et qd je fais ca :
Code :
|
valuee me renvoie nombre"
et ce " me rend
je ne comprends pas du tout comment il apparait ... surtout que je ne l'avais pas avant, j'ai fait quelques modifs et puis je suis revenu à mon code qui marchait et depuis j'ai ce "
Quelqu'un pour m'aider svp
Marsh Posté le 03-06-2004 à 17:17:29
non valuee est un char* donc qd je fais un fprintf il me renvoie la chaine de caractere nombre mais il me rajoute un " à la fin ...
Marsh Posté le 03-06-2004 à 17:27:01
non. il rajoute rien du tout. valuee c'est un pointeur sur une sous chaine de strgbufp. si y un caractère qui te plait pas, c'est pas strrchr qui le rajoute
Marsh Posté le 03-06-2004 à 18:43:50
Taz a raison valuee est une addresse indiquant la position du 1e ';'. Tu sais sa en revient au meme systeme que au-dessus, tu veux detecter des caractere.
Je l'ai fais, tu fais un fopen et fread de 1 octet et si c'est un ';' tu incremente une variable. Ainsi tu connait donc la position du truc a lire et le nombre de ';' passé.
Faut juste remettre la variable d'incrementation a zero lorsque tu lit un '\n'.
Maintenant si tu sais pas faire sa demerde toi, y a pas plus simple.
Marsh Posté le 07-06-2004 à 10:32:30
je pense que c'est un problème avec un caractère de fin de chaine ou un caractere de fin de ligne ... strrchr ne rajouterai-t-il pas un \n ou \0 et qd je visualise avec un fprint il m'afficherait ce caractère avec un " ???
Marsh Posté le 07-06-2004 à 10:46:20
MK Prog a écrit : Faut juste remettre la variable d'incrementation a zero lorsque tu lit un '\n'. |
c'est ca j'avais mal lu en effet.
je pense que ca pose probleme qd il lit un \n ... il m'affiche à la place un " ...
bon j'ai toujours pas trouvé la solution à mon pb , je suis désolé c'est pas si simple pour tout le monde
Marsh Posté le 28-05-2004 à 16:07:33
Bonjour,
strchr permet dans une chaine de trouver la premiere position où apparait le caractere mentionné mais comment faire pour trouver la deuxieme occurence du caractère.
Merci de la part d'un nOOb