E accent ou aigu

Résolu
sokotanic
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012
- 17 juil. 2007 à 06:58
katsankat
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
- 19 juil. 2007 à 21:52
bonjour
comment je peux ecrire dans une application console E accent ou aigu (é ou à ou ç ou à ...) sans passé par l'API windows ?
merci .

27 réponses

victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
19 juil. 2007 à 11:16
Bonjour,

Justement ce qui est le plus "chiant" si vous me permettez l'expression c'est de faire la liste avec la correspondance.

Par contre je ne connais pas ta syntaxe qui liste une chaine.
J'aurais utilisé un for (int i=0;i<strlen(chaine);i++)au lieu d'un while. En sachant que string est un mot réservé j'utilise chaine à la place.
switch( chaine[i] )
{
    case 'é': chaine[i] = 0x82; break;
    // La liste etc...
}

Bon le code c'est comment je l'aurais réécrit.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
katsankat
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
19 juil. 2007 à 16:22
Déplacer le pointeur sur la chaîne évite de la reparcourir avec strlen()... Plus rapide sur les grosses chaînes! De plus invoquer une fonction comme strlen() signifie pousser les arguments sur le stack etc... trop lent.

Par contre au lieu d'un long switch codé à la main sur les 127 caractères ASCII
étendus, je pense qu'il faudrait caster le caractère en unsigned char puis obtenir
sa représentation hexa ou octale pour remplacer chaque char concerné.
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
19 juil. 2007 à 17:12
string est une classe et non un mot clé. N'a strictement aucun effet en C. À renommer en _str pour éviter tout problème en C++.

"Par contre au lieu d'un long switch codé à la main sur les 127 caractères ASCII
étendus, je pense qu'il faudrait caster le caractère en unsigned char puis obtenir
sa représentation hexa ou octale pour remplacer chaque char concerné. "

Je ne comprend pas ce que tu veux dire.

C++ (@++)
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
19 juil. 2007 à 17:14
Ah oui aussi:

for (int i=0;i<strlen(chaine);i++)

Non non et non. strlen dans une boucle. Rien de plus mortel pour les performances. De plus, une chaine se termine obligatoirement par un 0 de fin de chaine alors aussi bien chercher ce 0 plutôt que d'effectuer un calcule supplémentaire.

C++ (@++)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
19 juil. 2007 à 20:16
Bonjour,

Si tu préfère :
int len = strlen(chaine);
for (int i=0;i<len;i++)

ou alors
for (int i =0;chaine[i]!=0;i++)

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
19 juil. 2007 à 21:28
for (int i=0;chaine[i]!=0;i++)




Ok mais priorise les pointeurs plutôt que l'indexation. On génèrera ainsi moin de code ASM.
On évitera aussi d'utiliser une variable supplémentaire, car on utilisera chaine directement.

Et puis d'ailleur, déclarer un int à même le for n'est valide qu'en C++. Génération d'une erreur en C



C++ (@++)
0
katsankat
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
19 juil. 2007 à 21:52
J'ai trouvé ça

#include <windows.h>

int main ()
{
 char *s = "à ça déjà";
 char dst[80];

 CharToOem (s, dst);
 puts(dst);

 getchar();
 return 0;
}

à bientôt les amis
0