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   -
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   Statut Membre Dernière intervention   6
 
Euh tu compares une longueur avec un char Oo?
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   437 > Sabetodo Messages postés 120 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   6
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   3
 
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   Statut Contributeur Dernière intervention   1 846 > Sabetodo Messages postés 120 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   3 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846 > Sabetodo Messages postés 120 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   6
 
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   Statut Membre Dernière intervention   3
 
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   Statut Contributeur Dernière intervention   1 846
 
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
jolie
 
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   Statut Contributeur Dernière intervention   1 846
 
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