Afficher le caractere 'e' dans une chaine
Résolu
Sabetodo
Messages postés
120
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,les gars! j'ai juste un petit problème avec mon programme. Au fait, je dois faire un programme qui permet retrouver le caractere 'e' dans une chaine tapée à partir du terminal UNIX. je l'ai fait mais il m'affiche une seule erreur concernant l'utilisation de strlen. Voici mon code:
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main (int argc, char* argv[])
{ int i,compteur;
for(i=1;i<argc;i++)
{
if('e'==strlen(argv[1][i]))
{
compteur++;
}
}
if(compteur==1)
printf("%d\n",compteur);
else
printf("0\n");
}
NB:Aidez-moi les gars!
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main (int argc, char* argv[])
{ int i,compteur;
for(i=1;i<argc;i++)
{
if('e'==strlen(argv[1][i]))
{
compteur++;
}
}
if(compteur==1)
printf("%d\n",compteur);
else
printf("0\n");
}
NB:Aidez-moi les gars!
A voir également:
- Écrivez un script qui détermine si une chaîne contient ou non le caractère e
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Script vidéo youtube - Guide
- É majuscule - Guide
6 réponses
normale strlen c'est pour calculer la longueur de la chaine
ça serait plutot
ça serait plutot
for(i=0;i<strlen(argv[1]);i++) if(argv[1][i]=='e') compteur++;
if('e'==argv[1][i]) devrait suffire, la comparaison de characters étant autorisée.
D'autre part tu testes :
if(compteur==1), et si il y a 2 e dans la chaine ^^?
Donc tu fais soit if(compteur > 0)
ou alors tu mets un break; après compteur++;
D'autre part tu testes :
if(compteur==1), et si il y a 2 e dans la chaine ^^?
Donc tu fais soit if(compteur > 0)
ou alors tu mets un break; après compteur++;
slt Nieli je viens de compiler mon programme sous unix il m'a affiche une erreur de segmentation. alors j'ai enleve strlen comme tu l'as dit et quand même ça ne passe pas.il m'affiche un avertissement de ce genre: warning: comparaison between pointer and integer. et lorsque je le compile il dit :segmentation fault.
Donne le programme que tu as testé au final.
Sinon, il y a encore plus simple en utilisant strchr :
Remarque : ce code, comme les autres qui t'ont été donnés ne cherchent que sur le premier argument. Sinon, il faut faire une boucle supplémentaire.
Sinon, il y a encore plus simple en utilisant strchr :
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char **argv){ char *p=NULL; if(argc<2) exit(EXIT_FAILURE); p=strchr(argv[1],'e'); if(p==NULL) puts("pas de e"); else puts("e trouve"); return 0; }
Remarque : ce code, comme les autres qui t'ont été donnés ne cherchent que sur le premier argument. Sinon, il faut faire une boucle supplémentaire.
voici mon code:
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main (int argc, char* argv[])
{ int i,compteur=0;
for(i=1;i<argc;i++)
{
if('e'==(argv[1][i]))
{
compteur++;
}
}
if(compteur>0)
printf("%d\n",compteur);
else
printf("0\n");
getch();
}
NB:Il m'affche toujours une erreur de segmentation sur l'utilisation des pointeurs.
Au fait, tu pourrais m'expliquer le fonctionnement de ton code?
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main (int argc, char* argv[])
{ int i,compteur=0;
for(i=1;i<argc;i++)
{
if('e'==(argv[1][i]))
{
compteur++;
}
}
if(compteur>0)
printf("%d\n",compteur);
else
printf("0\n");
getch();
}
NB:Il m'affche toujours une erreur de segmentation sur l'utilisation des pointeurs.
Au fait, tu pourrais m'expliquer le fonctionnement de ton code?
Normal, ton code n'est pas bon.
Je te le corrige.
Remarque : N'oublie pas que main retourne un entier donc c'est int main et non void main.
De plus, il faut faire un if sur le argc pour vérifier qu'il y a au moins un argument, sinon ça fera un segfault si t'appelles le programme sans arguments.
Ensuite tu faisais une boucle sur argc et non sur strlen(argv[1], donc le parcours était erroné.
Et enfin, évite d'utiliser la bibliothèque conio.h qui n'est pas portable.
Mon code en fait utilise strchr.
strchr(argv[1],'e') renvoie un pointeur vers le 'e' s'il est présent sinon renvoie NULL.
Donc il reste plus qu'à savoir si le retour est NULL (pas de e) sinon il y en a un.
Cela évite économise une boucle.
Dernière petite remarque : quand tu postes, n'oublie pas d'inclure ton code dans la balise dédiée à cet effet (en haut tu as trois boutons, utilise le quatrième), cela permet de rendre le code lisible.
Je te le corrige.
Remarque : N'oublie pas que main retourne un entier donc c'est int main et non void main.
De plus, il faut faire un if sur le argc pour vérifier qu'il y a au moins un argument, sinon ça fera un segfault si t'appelles le programme sans arguments.
Ensuite tu faisais une boucle sur argc et non sur strlen(argv[1], donc le parcours était erroné.
Et enfin, évite d'utiliser la bibliothèque conio.h qui n'est pas portable.
#include<stdio.h> #include<string.h> #include <stdlib.h> int main (int argc, char* argv[]) { int i,compteur=0; if (argc<2) exit(EXIT_FAILURE); for(i=0;i<strlen(argv[1]);i++) { if('e'==(argv[1][i])) { compteur++; } } if(compteur>0) printf("%d\n",compteur); else printf("0\n"); getchar(); return 0; }
Mon code en fait utilise strchr.
strchr(argv[1],'e') renvoie un pointeur vers le 'e' s'il est présent sinon renvoie NULL.
Donc il reste plus qu'à savoir si le retour est NULL (pas de e) sinon il y en a un.
Cela évite économise une boucle.
Dernière petite remarque : quand tu postes, n'oublie pas d'inclure ton code dans la balise dédiée à cet effet (en haut tu as trois boutons, utilise le quatrième), cela permet de rendre le code lisible.
Pourquoi compiler sous MS-DOS. Tu ne veux pas compiler avec une app comme Dev C++ ?
Sous MS-Dos, tu devras installer un compilateur C. Tape "compilateur c" dans google ^^.
Bon courage
Sous MS-Dos, tu devras installer un compilateur C. Tape "compilateur c" dans google ^^.
Bon courage
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Ton turbo C doit sûrement avoir des exécutables (comme gcc.exe ou d'autre). Regarde dans le répertoire de l'application. Ensuite, il te restera à mettre le répertoire qui contient gcc dans le PATH.
Cdlt
Ton turbo C doit sûrement avoir des exécutables (comme gcc.exe ou d'autre). Regarde dans le répertoire de l'application. Ensuite, il te restera à mettre le répertoire qui contient gcc dans le PATH.
Cdlt
slm, pardon mais c'est quoi un terminal UNIX ,car la solution est: mais sans utiliser la fonction main comme 1e fonction qui contient des parametres (peut etre c'est ça le TERMINAL UNIX ??) la solution:
#include<stdio.h>
main()
{int i,x;
char t[20];
printf("entrer la chaine de caracteres");
gets(t);
for(i=0;t[i]!='c';i++);
if(t[i]=='c') x=1;
else x=0;
if (x==1)printf("le caractere 'c' se trouve dans la chaines de carecteres");
else ("le carectere 'c' ne se trouve pas dans la chaine de caracteres");
getch();
}
essay de l'executer et merci.
#include<stdio.h>
main()
{int i,x;
char t[20];
printf("entrer la chaine de caracteres");
gets(t);
for(i=0;t[i]!='c';i++);
if(t[i]=='c') x=1;
else x=0;
if (x==1)printf("le caractere 'c' se trouve dans la chaines de carecteres");
else ("le carectere 'c' ne se trouve pas dans la chaine de caracteres");
getch();
}
essay de l'executer et merci.
Salut,
Son problème est déjà résolu ;)
Et puis, le terminal UNIX c'est tout simplement une fenêtre dans lequel tu peux taper des commandes.
Enfin ton programme n'est pas portable (getch), t'as pas inclus conio.h et enfin, il ne faut pas utiliser gets, mais fgets !
Ensuite, l'algorithme est erroné, tu fais une boucle for dans le vide.
Cdlt
Son problème est déjà résolu ;)
Et puis, le terminal UNIX c'est tout simplement une fenêtre dans lequel tu peux taper des commandes.
Enfin ton programme n'est pas portable (getch), t'as pas inclus conio.h et enfin, il ne faut pas utiliser gets, mais fgets !
Ensuite, l'algorithme est erroné, tu fais une boucle for dans le vide.
Cdlt