Bonjour à tous, je suis étudiant en informatique (je vais entamer ma troisième année) et je suis en pleines révisions avant la rentrée. Je suis en train de bloquer sur un exercice, cela consiste à écrire une fonction indiquant si un mot est facteur d'un autre (exemple : "poly", "copi", et "polycop" sont des facteurs de "polycopié"). J'ai donc répondu à l'exercice en plusieurs fonctions, je vous montre les codes que j'ai fait ainsi que la structure d'un "mot " demandé dans l'exercice.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <ctype.h>
#include <assert.h>
#define NMAX 300 
typedef struct {
	char m[NMAX];
} mot;
 
int est_facteur_gauche(mot facteur_g, mot src){
	for(int i=0;facteur_g.m[i]!='\0';i++){
		if(facteur_g.m[i]!=src.m[i]){
			return 0;	
		}
	}		
	return 1;	
} 
 
mot copyFromTo(int pos,int end, char tab[]){
	assert(pos<=strlen(tab) && end<=strlen(tab) && pos<=end);
	mot mnew;
	int nb=0;
	for(int k=pos;k<=end;k++){
		nb++;	
	}
	mnew.m[nb];
	for(int i=pos;i<=end;i++){
		mnew.m[i]=tab[i];
	}
	return mnew;
}
 
int est_facteur(mot facteur, mot src){
	for(int i=0;src.m[i]!='\0';i++){
		mot m=copyFromTo(i,strlen(src.m),src.m);
		printf("i = %d , s= %s\n",i,m.m);
		if(est_facteur_gauche(facteur,m)){
			return 1;
		}	
	}
	return 0;	
}
Je vais donc vous expliquer comment j'ai résonné. La fonction est_facteur_gauche était pour la question précédente demandant de renvoyer un booléen (1 ou 0) selon que le mot facteur_g soit facteur de src ou non. J'ai par la suite décidé d'écrire une fonction renvoyant un mot qui copiait les caractères du mot donné en argument de la position pos à la position end, je me suis dis que ce serait un moyen de vérifier si chaque mot donné à partir de chaque position du mot de départ (src) avait pour facteur le mot "facteur" , si c'était le cas pour aucun des mots, la fonction est_facteur renvoyait 0 (faux) . J'ai donc testé les résultats dans un main que je vous montre ci-dessus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
int main(){ 
        mot m1={"polycopié"};
	mot m2={"copi"};
       printf("%d",est_facteur(m2,m1));
	return 0;
}
Cette fonction n'a pas marché, après débogage j'ai remarqué que à l'itération 0, le mot m dont je me suis servi apparaissait, mais aux autres itérations, le mot m était vide. Je précise que dans cet exercice je n'ai pas le droit d'utiliser les fonctions strcpy , strcmp, strngcmp, seulement la fonction strlen(), c'est assez problématique car en C on a pas le droit de modifier des chaines de caractère.. . Pouvez vous s'il vous plait m'éclairer sur mon erreur ?
En vous remerciant d'avances
Bonne journée à vous !