comment convertir un char en int ?? - C - Programmation
Marsh Posté le 06-08-2003 à 20:02:51
Y a quoi dans ton char ? Tu veux avoir quoi comme genre de résultat ?
Marsh Posté le 06-08-2003 à 20:07:50
regarde du coté de la fonction du recherche du forum et tapes y s(n)printf/sscanf
Marsh Posté le 07-08-2003 à 17:31:20
je vais tout vous expliquez.
Alors je prends une chaine de caractère dans un fichier texte que je mets dans un pointeur.
Mais maintenant j'ai besoin de récupérer des valeurs dans cette chaine de caractères pour faire des opération dessus (opération numérique). donc je pensais que de faire un truc de ce style allait marcher:
float a;
char *b;
a=a+(int)b[1]*10;
mais en fait ca marche pas (bon j'ai fait tout le malloc et tout y a pas de pb c juste pour vous montrez l'essentiel)
voilà là je pense que je vous ai tout donné comme explication.
Marsh Posté le 07-08-2003 à 17:36:47
si ce sont des chiffres ASCII de 0 à 9 dans tes char; tu fais juste n = c - '0', où n = entier et c = char
Marsh Posté le 07-08-2003 à 17:38:58
ben dans ma chaine y a pas que des chiffres mais ce que je veux récupérer sont seulement des chiffres en effet
Marsh Posté le 07-08-2003 à 17:42:05
mais quelle bande de blaireaux... foutez dans /dev/null votre atoi. utilise sscanf !!!
Marsh Posté le 07-08-2003 à 17:45:52
morphleus a écrit : ben dans ma chaine y a pas que des chiffres mais ce que je veux récupérer sont seulement des chiffres en effet |
tu balayes ta chaine et quand tu trouve un chiffre tu fais *10+(le caractere -'0')
Marsh Posté le 07-08-2003 à 17:49:04
polo021 a écrit : |
tu sais comment je réagis à la provoc... je n'ai aucun humour sur les sujets que vous connaissez
Marsh Posté le 07-08-2003 à 17:50:43
elle marche nikel avec le - '0' fallait y pensezr quand meme.
Marsh Posté le 07-08-2003 à 17:51:48
morphleus a écrit : elle marche nikel avec le - '0' fallait y pensezr quand meme. |
Marsh Posté le 07-08-2003 à 17:52:10
Taz a écrit : tu sais comment je réagis à la provoc... je n'ai aucun humour sur les sujets que vous connaissez |
Marsh Posté le 07-08-2003 à 17:53:43
ReplyMarsh Posté le 07-08-2003 à 17:54:30
heu....
propose donc ta solution alors
EDIT : j'espere que t'as vu que le monsieur avait ecrit
Citation : ben dans ma chaine y a pas que des chiffres |
Marsh Posté le 07-08-2003 à 17:57:42
polo021 a écrit : heu....
|
Et alors?
sscanf est ce qu'il lui faut.
Marsh Posté le 07-08-2003 à 17:58:30
quelqu'un est capable de comprendre pourquoi ato? sont des fonctions à proscrire?
Marsh Posté le 07-08-2003 à 18:00:52
ReplyMarsh Posté le 07-08-2003 à 18:03:41
ben oui
si il a une string "35h9.34"
comment tu vas faire ton sscanf pour qu'il te resorte 35934 ????
Marsh Posté le 07-08-2003 à 18:04:25
et comment tu fais avec atoi? là n'est pas là question du tout
Marsh Posté le 07-08-2003 à 18:08:01
Taz a écrit : et comment tu fais avec atoi? là n'est pas là question du tout |
relis donc le topic en entier
Quand j'ai propose la solution atoi, il n'avait pas encore precise qu'il y avait d'autres caracteres dans sa chaine que 0-9.
Et apres j'ai propose
Citation : tu balayes ta chaine et quand tu trouve un chiffre tu fais *10+(le caractere -'0') |
Tandis que toi tu n'as toujours propose que sscanf meme sans dire comment on s'en sert dans ce cas precis
Marsh Posté le 07-08-2003 à 18:10:22
Taz a écrit : quelqu'un est capable de comprendre pourquoi ato? sont des fonctions à proscrire? |
Parce qu'y a pas de gestion d'erreurs
Marsh Posté le 07-08-2003 à 18:11:28
polo021 a écrit : Tandis que toi tu n'as toujours propose que sscanf meme sans dire comment on s'en sert dans ce cas precis |
Pkoi il devrait dire comment on se sert de cette fonction
Tu lis l'aide et basta
Marsh Posté le 07-08-2003 à 20:31:22
Bah suffit de faire un sscanf(regexp(lachaine, pattern_nettoyeur_qui_garde_que_les_chiffres)) et zou
PS: c'est certainement pas "regexp" la fonction en C, et pas forcément la bonne syntaxe, mais c'est un algo simple et efficace.
Marsh Posté le 07-08-2003 à 20:38:36
pas besoin de pattern nettoyeur.
suffit de parcourir la chaine, et chaque caractère qui valide int isdigit(int c) (de <ctype.h> ), tu le rajoutes dans ton buffer, et apres, effectivement, sscanf
Marsh Posté le 07-08-2003 à 20:58:23
Taz a écrit : pas besoin de pattern nettoyeur. |
Ouais, mais les regexp étant très performantes, chais pas ce qui est le mieu.
Marsh Posté le 07-08-2003 à 21:04:13
Y a pas de regexpr dans les librairies C standard il me semble
Marsh Posté le 07-08-2003 à 21:07:21
MagicBuzz a écrit : |
t'as vu ça ou? je vois pas ce qu'on peut faire de mieux qu'un pauvre parcours linénaire...
Marsh Posté le 07-08-2003 à 21:07:33
ReplyMarsh Posté le 07-08-2003 à 21:54:21
ben par exemple, pour remplacer des sous-chaînes par des autres (donc parcours linéaire basique) un regexp peut être jusqu'à 2 fois plus rapide.
(bon, d'un autre côté, ce chiffre est tiré de la doc de vb, qui est pas très rapide pour ce qui est des traîtements de chaînes )
Marsh Posté le 07-08-2003 à 21:58:53
réfléchis un peu, par ce que je vois mal comment une regex peut faire mieux qu'un parcours linéaire... et la copie qui va avec...
Marsh Posté le 07-08-2003 à 22:07:44
bah ça dépend comment est codée ta "isDigit()" par exemple.
Marsh Posté le 07-08-2003 à 22:10:39
ReplyMarsh Posté le 07-08-2003 à 22:13:01
bah y'a 50 façon de coder une fonction aussi basique, et notamment les fonctions style regexp sont très souvent ultra optimisée, genre y'a pas une ligne de code dedans, y'a que de l'asm, sans le moindre cycle superflu
Marsh Posté le 06-08-2003 à 19:22:42
voilà tout est dans la question.
Je ne sais pas comment convertir un char en int ou float en C.
J'ai essayé par affectation simple et ca ne me donne pas la valeur escompté.
A l'aide...