Fonction sous_mot

Fermé
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015 - Modifié par Chris 94 le 29/10/2013 à 02:17
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015 - 1 nov. 2013 à 21:47
svp j'ai fait la fonction sous_mot qui verifie si m2 est un sous mot de m1 jarrive po a trouver l'erreur:
int sous_mot(char m1[30];char m2[30]);
{ int l1,l2,i,j,sm=0,k; char c;
l1=strlen(m1); l2=strlen(m2);
if (l2=>l1) sm=0;
else
{c=m2[0];
for(i=0;i<l1;i++)
{
if(m1[i]==c)
{
k=i; for(i=k,j=0;i<l1,j<l2;i++;j++)
{
if(m1[i]==m2[j]) sm=1;else break;
}
}
else continue;
}
}}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 oct. 2013 à 18:54
Au lieu de int sous_mot(char m1[30];char m2[30]);
tu peux mettre : int sous_mot(char m1[30],char m2[30])
=> J'ai enlevé le ; entre les deux arguments ET le ; de fin de ligne.


if (l2=>l1)
C'est >= et non =>

for(i=k,j=0;i<l1,j<l2;i++;j++)
Il faut mettre une , entre i++ et j++ => i++,j++

Ta fonction est censée retournée un int. Il faut donc mettre un return dedans...

Cdlt,
2
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015
29 oct. 2013 à 22:35
merci :D c fait il reste un seul msg d'erreur:error:invalid suffix "o" on integer constant et il est signalé dans la main
int main()
{char ch1[30],ch2[30],int x;
.........
0
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015
29 oct. 2013 à 22:40
svp si klk un peut proposer une autre solution qu'il le fasse et merci encore
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 oct. 2013 à 23:22
char ch1[30],ch2[30],int x;
Mets un ; entre le ch2[30] et le int x; au lieu de la virgule.

D'ailleurs, il faut éviter de tout mettre sur une ligne. Mets plutôt une déclaration par type par ligne :
char ch1[30], ch2[30];
int x;

C'est plus clair.
0
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015
29 oct. 2013 à 23:27
c'est la meme chose le msg d'erreur est tjr la
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 oct. 2013 à 23:40
Peux-tu reposter ton code avec les modifications, en le mettant entre deux balises "code" (à droite du bouton "souligné") et en l'indentant ?
0
je suis pas sur,
mais je pense que ton erreur vient de
int sous_mot(char m1[30];char m2[30]);

les char sont des tableaux, et là tu n'envois que la 30e case de ton tableau.

Tu devrais travail avec des pointeurs, ou envoyer m1[0] et m2[0], qui sont les 1er cases!
0
Utilisateur anonyme
29 oct. 2013 à 13:41
peu être qu'éviter de mettre un ';' entre deux paramètres serai pas mal aussi, et indiquer une taille de tableau et non un élément :

au lieu de


int sous_mot(char m1[30];char m2[30]);

mettre :


int sous_mot(char [30] m1,char [30] m2);



ou, comme tu le suggère :



int sous_mot(char * m1,char * m2);

naga
0
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015
29 oct. 2013 à 16:58
merci j'avais po fait attention à ça mais il y-a tjr des msg d'erreur:
error:invalid suffix "o" on integer constant
error:expected identifier or '(' before '{' token
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 29/10/2013 à 18:50
@evifalcon
int sous_mot(char m1[30];char m2[30]);
les char sont des tableaux, et là tu n'envois que la 30e case de ton tableau.


Non les char ne sont pas des tableaux. Ce sont des chars. Et si tu écris char m1[30] tu n'envoies pas le 30ème (31ème serait plus juste d'ailleurs) caractère. Tu envoies un pointeur sur le 1er élément. D'où l'écriture identique : int sous_mot(char *m1, ...)
L'erreur ici est surtout le ";" pour séparer les paramètres. Ainsi qu'en fin de lignes.

@nagashima
int sous_mot(char [30] m1,char [30] m2);
T'es sûr de ton coup ? J'ai jamais vu cette syntaxe...
0
Utilisateur anonyme
30 oct. 2013 à 07:46
@nagashima 
int sous_mot(char [30] m1,char [30] m2);
T'es sûr de ton coup ? J'ai jamais vu cette syntaxe...

je n'en suis pas certain, à tester, mais il me semble qu'on a la possibilitée dans le sens ou ca permet de determiner un taille fixe de chaine. Je test ca et je te redis
0
Utilisateur anonyme
30 oct. 2013 à 07:51
donc non la syntaxe qu'il utilisait était bonne :


char* test(char a [30], char b [30])
{
char* r = new char[60];
for(int i = 0; i < 30 ; i++)
{
r[i] = a[i];
r[59-i] = b[i];
}
return r;

}


int main(int argc, char** argv) {
printf("%s",test("azertyuiopmlkjhgfdsqwxcvbnmpol","123456789012365478963589621478"));
system("PAUSE");
return 0;
}
0