1

j'aurais aimer savoir comment faire pour que mon porg me trouve un caractere spécial (@) dans une chaine de caractère donné par l'utilisateur et qu'il m'enregistre ce qu'il y a derriere ce caractere dans une autre chaine.

merci

2

He bien si tu n'arrives pas à résoudre toi-même un problème si simple, laisse tomber la prog wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

3

ouais mais c qu'en fait je suis en train d'apprendr le java2 et y me fodrais ca en C++.
mais je n'ai aucune prétention et je ne me dis mm pas debutant en programmtion (je sais que j'en suis loin) mais je m'en fous , j'ai juste besoin qu'on m'aide un peu et c tout

4

Ok si tu débutes vraiment, c'est compréhensible. Je te donne une source, maintenant à toi d'essayer de la comprendre si tu souhaites progresser.
void Fonction(char *destination, char *source, char CaractereRecherche)
{
  *destination= 0;
  while (*source && *source != CaractereRecherche) source++;
  while (*source) *destination++= *++source;
}
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

5

Et pour la reconnaissance du caractère bizarre (comme @) que tu ne peux pas tapper avec un clavier, tu peux utiliser le code ASCII.

Par exemple, @ = 64 en ASCII

Alors, en reprenant l'exemple précédent, tu fais ça :
void _main(void)
{
     [12]char[/12] CaractereRecherche = [5]64[/5];
     .... 
<tu écrits ton code en définissant source et destination, et en appelant la fonction fonction.>
}


Automatiquement, CaractèreRecherche sera "@" si tu le définis en tant que char.
[edit]Edité par DropF le 12-02-2002 à 17:21:16[/edit]

6

si g bien compris , je devrai faire cela pour trouver tout ce qui se trouve apres le caractere @ dans la chaine cara1 ; la chaine créée ira dans cara2.

void Fonction(char *cara2, char *cara1, char @)
{
*destination= 0;
while (*cara1 && *cara1 != @) cara1++;
while (*cara1) *cara2++= *++cara1;
}


pourrais-tu m'expliquer ici le role des * ?

merci bcp!

7

Les * signifie que la variable est un pointeur. Pour comprendre les pointeurs, il faudrait que tu lises des cours sur la programmation en C.


Mais voici quand même un exemple qui explique bien le fonctionnement des pointeurs :
[12]short[/12] A = 10;  [3]// la variable A est égale à 10[/3]
[12]short[/12] B = 50;  [3]// la variable B est égale à 50[/3]
[12]short[/12] *P;  [3]// on définit la variable P en tant que pointeur[/3]

P = &A; [3]// P pointe sur A, c-a-d que P=A=10, et si tu modifie la valeur de A,
           alors la valeur de P change aussi (c'est comme si P et A étaient la même variable)[/3]
B = *P;  [3]// B est égale à la valeur pointée par P, c-a-d que B=A=10[/3]
*P = 20;  [3]// La valeur pointée par P est égale à 20, c-a-d que A=20[/3]


Au final, A=20 et B=10.

Voilà, j'espère que c'est assez clair roll
Mais le mieux, c'est d'apprendre à partir d'un cours (livres, ...) ou d'un tutoriel
[edit]Edité par DropF le 12-02-2002 à 17:38:24[/edit]

8

Je n'aime pas trop le facon dont tu définit les pointeurs! en fait chaque variable est placée dans la memoire a une ardresse. un pointeur est une variable qui contient une adresse!
les pointeur ce déclarent avec une * devant le nom:

[12]short[/12] A = 10;  [3]// la variable A est égale à 10[/3]
[12]short[/12] B = 50;  [3]// la variable B est égale à 50[/3]
[12]short[/12] *P;  [3]// on définit la variable P en tant que pointeur(elle contient des adresses de variables de type short)[/3]

P = &A; [3]// P revoir l'adresse de A(&A)[/3]
B = *P;  [3]// B recoit la valeur qui ce situe a l'adresse contenue dans P(c'est a dire la valeur de A)[/3]
*P = 20;  [3]// la valeur a l'adresse P recoit 20[/3]


Au final, A=20 et B=10.

cependant je confirme les cours sont bien plus faciles!
avatar

9

g des cours sur les pointeurs , je regarderais ca ce soir mais il me semble avoir compris.
si un pointeur P pointe vers A et que P est modifier ,alors A est modifier , c ca non? alors que si A est modifier P ne l'est pas

10

si P pointe vers A :
Si P est modifié, P ne pointe plus vers A...
Si l'emplacement pointé par P est modifié, A aussi
Si A est modifié, l'emplacement pointé par P aussi.
C'est tout.
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

11

ok merci

12

Excuse-moi, c'est vrai que le code que je t'ai fait n'est peut-être pas des plus simples attention
Je le simplifie :
void Fonction(char *destination, char *source)
{
  int i= 0,
      j= 0;
  
  destination[0]= 0;
  while (source[i] != 0 && source[i] != '@')
    i++;
  while (source[i] != 0)
    destination[j++]= source[++i];
}

[edit]Edité par Thibaut le 12-02-2002 à 20:53:05[/edit]
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

13

Facile:

#include <cstring>
void Fonction(char *destination, char *source) {strcpy(destination,strchr(source,'@')+1);}
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

kevin>si je met que ton code ca marche?
si oui tu pourrais expliquer un peu?
merci

15

>si je met que ton code ca marche?

À priori oui, sauf si j'ai fait une erreur.

>si oui tu pourrais expliquer un peu?

http://tigcc.ticalc.org/doc/string.html#strchr
http://tigcc.ticalc.org/doc/string.html#strcpy
sachant que cstring est l'équivalent C++ de string.h.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

je te remerci kevin!

17

Je tiens juste à te prévenir que Kevin est l'ami des codes lents... => le mien est plus rapide (si le compilo est de bonne qualité).
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

18

ouais mais la rapidité je verrais ca plus tard , pour l'instant si ca marche , je prend!

19

>Thibaut:
>Je tiens juste à te prévenir que Kevin est l'ami des codes lents... => le mien est plus rapide (si le compilo est de bonne qualité).

Comment ça le tien est plus rapide?
Je te signale qu'en général, réécrire les fonctions de la libc n'est pas une bonne idée! Les fonctions de la libc sont souvent beaucoup mieux optimisées pour l'architecture désirée que ton code naïf qui ne tient pas compte du processeur!

Juste une chose à laquelle il faut faire attention: mon code présuppose que la chaîne contient effectivement un '@'. Si elle n'en contient pas, ça plante. (strchr renvoie NULL s'il n'y a pas de '@', et un strcpy avec 1 comme adresse de source ne risque pas de marcher.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

20

Ben avec TIGCC le code est parfaitement optimisé tonguetongue
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

21

Non, je n'appellerais pas l'horreur que m'a sorti GCC "optimisé". Mais c'est aussi parce que tu as codé comme un porc. Au lieu de travailler avec i, il fallait travailler directement avec le pointeur.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

kevin> ca serais pas possible que ca plante pas s'il n'y a pas de @?
du genre ca ouvre une boite de dialogue "pas de @"

23

Si:

#include <cstring>
void Fonction(char *destination, char *source) {
char *temp=strchr(source,'@');
if (!temp) cout << "pas de @n"; else
strcpy(destination,temp+1);
}


(Remplace cout << "pas de @n" par un appel à MessageBox ou un truc du genre si tu veux une boîte de dialogue.)
[edit]Edité par Kevin Kofler le 13-02-2002 à 13:30:16[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

24

Mon CHER Kevin, as-tu lu ce que j'ai écrit au-dessus du code avec l'adressage indexé ?
Avec votre suprême intelligence, en lisant, vous auriez dû comprendre que j'ai proposé un code beaucoup plus efficace u_n peu plus haut dans le topic.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

25

/* Mais il fera quand même strcpy même si !temp comme ça, je me trompe ? */ (corrigé)
[edit]Edité par ZdRUbAl le 13-02-2002 à 13:35:31[/edit]

26

Bon. Mais même la version avec les pointeurs est moins optimisée qu'une recopie codée en assembleur!

GCC traduit:
while (*source) *destination++= *++source;
L10
en:
.L10:
	addq.l #1,%a0
	move.b (%a0),(%a1)+
	jbne .

jbne .L10
plutôt que:
	addq.l #1,%a0
.L10:
	move.b (%a0)+,(%a1)+

qui (à part la première ligne - le +1 est fait séparément dans mon code) se trouverait dans une bonne implémentation de strcpy.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

27

>ZdRUbAl: Mais il fera quand même strcpy même si !temp comme ça, je me trompe ?

Oups, c'est corrigé (j'ai rajouté else).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

28

ok merci

29

Kevin : merde j'avais pas fait gaffe à l'incrémentation ! Ca bouffe 2 c.h. de plus à chaque itération sad
=> Dans ce cas, pour les grandes chaînes, le code de Kevin est plus rapide.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

30

mais qu'appelle-t-on grande chaine??
une chaine a 10 , 50 caracteres?