Afficher le caractere 'e' dans une chaine

Résolu/Fermé
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 - 17 déc. 2008 à 00:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 déc. 2008 à 20:20
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!
A voir également:

6 réponses

Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 6
17 déc. 2008 à 00:28
Euh tu compares une longueur avec un char Oo?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
17 déc. 2008 à 00:31
normale strlen c'est pour calculer la longueur de la chaine
ça serait plutot
for(i=0;i<strlen(argv[1]);i++)
if(argv[1][i]=='e')
compteur++;
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
17 déc. 2008 à 00:55
ok Mr Mype, merci quand même. Et pourtant ce c'est que j'avais fais, mais il m'affiche des erreurs et j'ai changé.Mais de toute façon je te remercie de m'avoir repondu à temps.Bonne soireé.
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
17 déc. 2008 à 02:25
juste une question: porquoi fo(i=0;i<strlen(argv[1]);i++) et non pas for(i=0;i<strlen(argv[]);i++)?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436 > Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010
17 déc. 2008 à 04:36
parce que c'est la longueur de la chaine que tu as passé en parametre et elle se trouve dans argv[1] le nom de ton programme lui par exemple se trouve dans argv[0]
0
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 6
17 déc. 2008 à 00:31
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++;
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
17 déc. 2008 à 00:52
ok, marce beaucoup Mr Nieli. Je viens de le compiler et ça passe. Mais tu pourrais me dire quel est la syntaxe et la commande qu'on utilise pour compiler et executer un programme sous MS DOS?
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
17 déc. 2008 à 11:31
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010
17 déc. 2008 à 12:17
Donne le programme que tu as testé au final.

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.
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
17 déc. 2008 à 12:31
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?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010
17 déc. 2008 à 12:44
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.

#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.
0
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 6
17 déc. 2008 à 01:25
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
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
17 déc. 2008 à 01:34
j'ai déjà un compilateur turbo c installe sur mon pc. mais je voulais le compiler sous dos. comme par exemple si j'etais sous unix j'aurais fait gcc nom_fichier.c -o nom_fichier ensuite je l'execute en faisant ./nom_fichier
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 déc. 2008 à 01:39
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
0
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 déc. 2008 à 20:20
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
0