Programmation en C les tableaux

Fermé
Tom - Modifié par Tom le 11/11/2011 à 17:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 nov. 2011 à 11:29
Bonjour,

Je souhaite comparer les caractères de deux tableaux les un après les autres et afficher les caractères qui se ressemble.

Ici je souhaite comparer le tableau voyelle qui contient (a,e,i,o,u,y,) au tableau nom celui-ci contient le nom tapez ultérieurement par l'utilisateur du programme.

Exemple: nom=tom

Comparer tom à a,e,i,o,u,y

resultat: les deux tableau ont comme caractere(s) identique: o.

Voici mon code:
#include<stdio.h> 
#include <string.h> 
main() 
{ 
     char nom[20],prenom[20]; 
     int i,n; 
void main(){char voyelle[7]; 
Chaine[0]= 'a'; 
Chaine[1]= 'e'; 
Chaine[2]= 'i'; 
Chaine[3]= 'o'; 
Chaine[4]= 'u'; 
Chaine[5]= 'y'; 
Chaine[6]= '\0';} 
  printf("Tapez vote nom et prenom: \n"); 
  scanf("%s %s",&nom,&prenom);       
  i=0; 
  n=0; 
  while(nom[i]!=0) 
  i++; 
  while(prenom[n]!=0) 
  n++; 
  printf("Votre nom comporte: %d lettres et votre prenom: %d lettres", i,n); 
   
  // strcmp(nom,voyelle)  ??? 
   
  fflush(stdin); 
  getchar();     
} 


3 réponses

mcdavis Messages postés 10 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011 6
Modifié par mcdavis le 12/11/2011 à 00:28
Je crois :
char voyelleEnCommun[]; 
int j, k, l=0; 
for(j=i;j>0;j--) { // pour chaque lettre du nom 
    for(k=0;k<6;k++) { // on test chaque voyelles 
    if(nom[i] == voyelle[k]) { 
        voyelleEnCommun[l] = voyelle[k]; // On note la voyelle en commun 
        l++;                                             //  dans un tableau 
     } else 
         ; 
     } 
    } // on a tester toutes les lettres du mot 

for(;l>0;l--) // l le nombre ee voyelles en commun 
printf("%c ,", voyelleEnCommun[l]); // affiche les voyelles trouver 
printf(" sont presentes dans votre nom"); 
}
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
12 nov. 2011 à 10:44
char voyelleEnCommun[];
Tu as oublié de déclarer la taille du tableau.

if(nom[i] == voyelle[k]) {
C'est quoi i ? l plutôt non ?
0
mcdavis Messages postés 10 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011 6
12 nov. 2011 à 10:54
effectivement :
char voyelleEnCommun[i+1];// nombre de lettre du nom
et pour le if c'est nom[j] car c'est la lettre du nom qu'on est entrain de tester
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
12 nov. 2011 à 11:07
char voyelleEnCommun[i+1];// nombre de lettre du nom
C'est quoi le i ?
0
mcdavis Messages postés 10 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011 6
Modifié par mcdavis le 12/11/2011 à 11:16
le i c'est Tom qui l'avait codé, c'est le nombre de lettre du nom
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
12 nov. 2011 à 11:29
Ah ok je vois.
Dans ce cas, for(j=i;j>0;j--), il vaut mieux commencer à i-1, sinon tu commences avec '\0'. Certes rien de dramatique.

Sinon pour Tom,
Si tu utilises cet algorithme, n'oublie pas de mettre ton compilateur en ISO C99, sinon cela ne fonctionnera pas. Ou alors utilise malloc pour faire déclarer le tableau.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
Modifié par fiddy le 12/11/2011 à 10:45
Bonjour,

Plusieurs remarques :

main() -> int main (void)

Tu peux directement déclarer ton tableau de voyelle en une ligne :
char voyelle[]="aeiou";

void main(){ ???
Attention tu déclares une fonction dans une fonction (de même nom en plus).

Pour le scanf, je te conseille :
scanf("%19s %19s",nom,prenom);


Pour le nombre de lettre, tu peux utiliser directement la fonction strlen.
strlen(nom) qui te renverra le nombre de caractères.

Pour évaluer le nombre de voyelles, tu peux faire :
for(i=0; i < strlen(voyelle) + 1; i++)  
   if ( strchr(nom, voyelle[i]) )  
       printf("voyelle commune : \n", voyelle[i]); 

A partir de ça, tu peux

fflush(stdin);
A ne jamais utiliser.

Et enfin n'oublie pas : "return 0;" juste après ton dernier getchar();

Cordialement,

Google is your friend
1
mcdavis Messages postés 10 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011 6
12 nov. 2011 à 10:56
Juste une petite erreur :
printf("Voyelle en commun : %c \n", voyelle[i]);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
12 nov. 2011 à 11:25
Très juste :-).
0
Merci à tous et désolé pour le code affreux :D
0