'strcat' : cannot convert parameter 2 from 'char' to 'const char *'

daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012 - 14 oct. 2007 à 09:34
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 14 oct. 2007 à 15:03
Bonjour tout le monde,

J'essaie de faire un petit programme qui permet lorsqu'il rencontre deux voyelles l'une à côté de l'autre de mettre un v entre ces deux voyelles.

Je pense que mon algorithme est correcte mais j'ai un problème à la compilation.

Cette exercice est surtout là pour utiliser les différentes fonctions sur les chaines de caratères (strcat, strlen, strcpy...)

Voici mon code :

#include


inr main(void)
{
 char voyelles[] = {'a','e','i','o','u','y'};
 char phrase[200];
 char phrase2[200];
 char caractere1;
 char caractere2;
 char MotEnJavanais[50];
 char AAjouter = 'v';
 int i;
 //char caracteres[2];


 printf("Veuillez svp encodez une phrase, je vais vous la traduire en javanais\n");


 gets(phrase);


 printf("la phrase est %s \n",phrase);


 int taille = strlen(phrase);


 for (i =0; i<taille-1;i++)
 {
  
  //caractere1 = phrase[i];
  //caractere2 = phrase[i+1];
  //printf("%c %c ",caractere1, caractere2 );


   if (((phrase[i] =='a')||(phrase[i] == 'e')||(phrase[i] == 'i')||(phrase[i] == 'o') || (phrase[i] == 'u') || (phrase[i] == 'y'))&&((phrase[i]+1 =='a')||(phrase[i]+1 == 'e')||(phrase[i]+1 == 'i')||(phrase[i]+1 == 'o') || (phrase[i]+1 == 'u') || (phrase[i]+1 == 'y')))
   {
    printf("OK\n");
    strcat(phrase2,phrase[i]);
    strcpy(phrase2 + strlen(phrase[i]+1),"v");
    //strcat(MotEnJavanais,AAjouter);
    //strcat(MotEnJavanais,caractere2);
   
    
   }
    
    else
    strcat(phrase2,phrase[i]);


 
 }

return 0;
}

J'essaie donc de voir si la valeur de phrase[0] est une voyelle ET si le caractère d'à côté est aussi une voyelle, si c'est le cas, je concatène le caractère dans le tableau (avec strcat), je copie ensuite le v dans le tableau, à la position de la valeur que je viens d'entrer  +1, autrement, je ne fait que concaténer le caractère (dans le else).

J'obtiens 3 messages d'erreur :

'strcat' : cannot convert parameter 2 from 'char' to 'const char *'
'strlen' : cannot convert parameter 1 from 'char' to 'const char *'
'strcat' : cannot convert parameter 2 from 'char' to 'const char *'

Il y'a quelque chose que je n'ai pas compris

Merci d'avance pour votre aide.

David

5 réponses

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
14 oct. 2007 à 10:08
Bonjour,

Désolée mais y'a vraiment tout à refaire là. Tu n'as vraiment pas compris je pense au strcpy et strcat.

OK strcpy ça va copier une chaine dans une autre en s'arrêtant au caractère de fin de chaine, le \0 
Et strcat ça va concaténer une chaine dans une autre en s'arrêtant aussi au \0 
Ok, pour cet exercice, tu n'as pas à utiliser l'un ou l'autre car tu fais de la copie caractère par caractère
en gros, qu'est-ce que tu dois faire ?

indiceDansChaine1 <-- 0
indiceDansChaine2 <-- 0
tantque chaine1[indiceDansChaine1]!=\0 faire
si estUneVoyelle(chaine1[indiceDansChaine1]) et estUneVoyelle(chaine1[indiceDansChaine1+1]) alors
chaine2[indiceDansChaine2] = chaine1[indiceDansChaine1]
chaine2[indiceDansChaine2+1] <-- 'v'
 indiceDansChaine2 <-- indicDansChaine2+2
  sinon
 chaine2[indiceDansChaine2] <-- chaine1[indiceDansChaine1]
 indiceDansChaine2 <-- indiceDansChaine2+1
finsi
 indiceDansChaine1 <-- indiceDansChaine1+1
 fintantque
 chaine2[indiceDansChaine2] <-- '\0'
tu vois ? tu utilises 2 indices différents pour parcourir tes chaines et des copies de caractère et le tour est joué

=

Une autruche ne se cuit pas aux petits lardons
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
14 oct. 2007 à 11:09
Bonjour The Guardian,

Merci pour ton alogortihme.

Le Tant que != \O est ok

Par contre, si je tape comme phrase "marco" par exemple, il n'y a pas de voyelle qui sont contigue mais il dès qu'il rencontre une voyelle, il rentre dans le if et exécute les instructions.

Voici mon if :

if((phrase[indice1]=='a')||(phrase[indice1]=='e')||(phrase[indice1]=='i')||(phrase[indice1]=='o')||(phrase[indice1]=='u')||(phrase[indice1]=='y') && (phrase[indice1+1]=='a')||(phrase[indice1+1]=='e')||(phrase[indice1+1]=='i')||(phrase[indice1+1]=='o')||(phrase[indice1+1]=='u')||(phrase[indice1+1]=='y'))
{
   printf("ok");
  }
    
  indice1++;

Quand je suis en mode débogage, je met le curseur sur phrase, il m'indique "marco", je met mon curseur sur le indice, il me met 0 (au premier passage de la boucle while) mais je ne sais jamais savoir réellement ce que vaut phrase[indice], y'a-t'il moyen de voir la valeur de phrase[indice]

Merci encore pour ton aide.

beegees
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
14 oct. 2007 à 12:48
OK,

bon attend je je fais le code, ca prend deux minutes, et tu vas comprendre.

#include <stdio.h>
#include <stdlib.h>
 
#define MAX_JAVANAIS 200
 
char * calculerJavanais(char * mot);
int estVoyelle(char lettre);
 
int main(int argc, char ** argv) {
        char * javanais;
if (argc!=2) {
                printf("Syntax: %s mot\n", argv[0]);
                return 1;
        }
        javanais = calculerJavanais(argv[1]);
        printf("javanais=%s\n", javanais);
        free(javanais);
        return 0;
}
 
char * calculerJavanais(char * mot) {
        char * javanais;
        int indexDansMot, indexDansJavanais;
        indexDansMot = 0;
        indexDansJavanais = 0;
        javanais = (char *)malloc((MAX_JAVANAIS+1)*sizeof(char));
        while (mot[indexDansMot]!=0) {
                if (estVoyelle(mot[indexDansMot]) && estVoyelle(mot[indexDansMot+1])) {
                        javanais[indexDansJavanais] = mot[indexDansMot];
                        javanais[indexDansJavanais+1] = 'v';
                        indexDansJavanais = indexDansJavanais+2;
                }
                else {
                        javanais[indexDansJavanais] = mot[indexDansMot];
                        indexDansJavanais = indexDansJavanais+1;
                }
                indexDansMot = indexDansMot+1;
        }
        javanais[indexDansJavanais] = '\0';
        return javanais;
}
 
int estVoyelle(char lettre) {
        if ((lettre=='a') || (lettre=='e') || (lettre=='i') || (lettre=='o') || (lettre=='u') || (lettre=='y')) {
                return 1;
        }
        else {
                return 0;
        }
}

Je l'ai mis ici au pire: http://rafb.net/p/yynrZF86.html
j'ai testé ca marche :p
=

Une autruche ne se cuit pas aux petits lardons
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
14 oct. 2007 à 13:21
Merci beaucoup the guardian pour ce code est surtout pour le temps que tu as consacré.

Entre ma dernière réponse et ta réponse, j'ai pas mal cherché et je suis arrivé à quelque chose qui fonctionne.

En plus de cela, j'utilise strcpy et strlen qui était quand même le but de cet exercice.

Voici mon code, sais-tu me dire ce que tu en pense ?

#include



void main()
{
 char phrase[200];
 char phrase2[200];
 int indice1 = 0;
 int indice2 = 0;
 char AAjouter = 'v';
 int i=0;
 
 printf("Veuillez svp encodez une phrase, je vais vous la traduire en javanais\n");



 gets(phrase);



 int taille = strlen(phrase);



 while(phrase[indice1]!='\0')
 {
  if(((phrase[indice1]=='a')||(phrase[indice1]=='e')||(phrase[indice1]=='i')||(phrase[indice1]=='o')||(phrase[indice1]=='u')||(phrase[indice1]=='y')) && ((phrase[indice1+1]=='a')||(phrase[indice1+1]=='e')||(phrase[indice1+1]=='i')||(phrase[indice1+1]=='o')||(phrase[indice1+1]=='u')||(phrase[indice1+1]=='y')))
  {
   phrase2[indice2] = phrase[indice1];
   strcpy(phrase2+(indice2+1),"v");
   //printf("phrase2 vaut %s",phrase2);
   indice2+=2;
   indice1++;
  }
  else
  {
   phrase2[indice2] = phrase[indice1];
   indice2++;
   indice1++;
  }



  
    
  
 }
 strcpy(phrase2+(indice2),"\0");



 indice2 = 0;



 while(phrase2[indice2]!='\0')
 {
  printf("%c",phrase2[indice2]);
  indice2++;
 }
 
}


Je teste ton code, merci encore pour ton dévouement.

David
0

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

Posez votre question
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
14 oct. 2007 à 15:03
Re,

oui ça devrait marcher ton code :p
y'a deux lignes que tu pourrais changer si tu veux
pour utiliser strcat au lieu de strcpy
tu utilises strcpy sur des chaines d'un seul caractère (ou deux dans le cas du "v", en comptant le '\0')
pourquoi pas
si tu t'assurais que chaine2 est remplie entièrement de \0
tu pourrais aussi utiliser strcat pour ajouter une chaine à la fin de la chaine
exemple:
strcat(chaine2, "v"); va ajouter la lettre 'v' tout à la fin de la chaine2
=

Une autruche ne se cuit pas aux petits lardons
0
Rejoignez-nous