Tronquer une chaine de caractère

gilleswathelet Messages postés 1 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 12 octobre 2004 - 12 oct. 2004 à 15:16
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 12 oct. 2004 à 22:16
bonjour,
je programme un p'tit peu en C et j'aimerais savoir s'il est possible, a partir d'une chaine de caractères pouvant comporter jusqu'à 60 caractères, d'afficher uniquement les 20premiers suivi de ....
exemple :
char chaine[60]="bonjour, voici un petit essai pour mon problème";
moi ce que je veux obtenir de printf, c'est
bonjour, voici un pe...

attention il faut toutefois garder la chaine de caractère complète dans mon fichier.

merci d'avance

11 réponses

Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
12 oct. 2004 à 16:01
Rien de pus simple:

#include <stdio.h>

void tronca(char *str) {
str += 20;
if (*str) {
*str++ = 46;
*str++ = 46;
*str++ = 46;
*str++ = 0;
}
}

int main(int argc, char* argv[])
{
char chaine[60]="bonjour, voici un petit essai pour mon problème";
tronca(chaine);
printf("%s\n",chaine);
return 0;
}


Cependant attention à la taille du tableau...
0
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
12 oct. 2004 à 16:06
Et en affichant directement dans la console, sans modifier la chaîne, c'est encore plus simple:

#include <stdio.h>

void troncaDisp(char *str) {
int i = 0;
while (i < 20 && *str != 0) 	{ 
printf("%c",*str++);
i++;
}
printf("...\n");
}

int main(int argc, char* argv[])
{
char chaine[60]="bonjour, voici un petit essai pour mon problème";
troncaDisp(chaine);
return 0;
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 oct. 2004 à 16:16
pour afficher x caracteres:

char c = chaine[x];
chaine[x] = 0;
puts(chaine);
chaine[x] = c;
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 oct. 2004 à 17:49
quand meme, faut d'abord jeter un oeil du coté des formats

#include <stdio.h>

int main()
{
const char *str = "bonjour, voici un petit essai pour mon problème";

printf( "%.10s\n", str );

}
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 oct. 2004 à 17:55
Hades53 > ta pas trouver mieux que printf pour afficher un caractere ou une chaine ? ca te derange pas que printf devra parser systematiquement ta chaine (sans format) pour du beurre ?

fputc (putchar aussi, en macros), fputs (vecchio56, si tu veux pas le \n à la fin), puts, ...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 oct. 2004 à 17:58
Salut djl

au fait saurais tu faire printf( "%.10s\n", str ); sachant que 10 est dans une variable? Je pensais faire un sprintf préalable, mais ca devient lourd...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 oct. 2004 à 18:04
chaine[x] = 0; est plus aproprié a ce moment la
0
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
12 oct. 2004 à 18:54
djl-> oui printf("%.20s...\n",chaine); ;)
Enfin bon ça sert à rien de se prendre la tête la-dessus, ça pas un gain de 2.10^-13ms qui va changer grand chose.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 oct. 2004 à 19:58
printf("%.20s...\n",chaine); suffit

reconnais que c'est dommage d'avoir perdu du temps a coder un truc qui existe et est universel
0
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
12 oct. 2004 à 22:13
C'est c'est vrai je reconnais, mais bon j'ai pas vraiment perdu beaucoup de temps.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 oct. 2004 à 22:16
et moi ca m'a pris du temps d'ecrire %.20s :D

potasse un peu la lib standard et tu veras que tu seras beaucoup plus efficace et ton code beaucoup plus sur et portable (sincererment)
0
Rejoignez-nous