Bonjour,
Quelques commentaires :
1 2
| int n;
n = strlen(s1); |
** Tu peux mettre les deux lignes précédentes en une seule pour plus de concision (et de clarté), les séparer n'est utile que si tu veux séparer les déclarations du reste du code, ce qui n'est apparemment pas le cas ici.
1 2 3 4
| char *texte;
s1 = texte;
char *mot;
s2 = mot; |
** Les variables texte et mot sont inutiles ici, tu ne t'en sers pas par la suite. Il vaut mieux nommer explicitement s1 et s2, ça permettra d'auto-documenter la fonction et d'avoir un code plus clair.
int *tabposition = (int *)malloc(strlen(s1) * sizeof(int));
** Normalement il faut toujours tester le retour de malloc au cas où ...
** Plusieurs choses ici :
* Tu compares toujours les mêmes chaines, quelles que soient les valeurs de i et de j, le résultat du test est donc toujours le même.
* De plus pourquoi le strncmp ? et pourquoi le 3 ? Tu voulais certainement utiliser la longueur du mot recherché ("bon" dans ton exemple) mais alors il vaut certainement mieux utiliser strlen(s2).
* Enfin il faut que les tests soient le plus explicite possible, ici il vaut mieux écrire :
if (strncmp(...) != 0)
Utiliser le fait qu'un entier non nul soit vrai est à utiliser de préférence quand le nom de l'entier (ou de la fonction le renvoyant) est explicite exemple :
if (estPositif(x)) { /* Faire quelque chose */ }
** Dès que i est différent de n, la fonction retourne, donc dès le premier tour de boucle, si la chaîne est de longueur non nulle.
** Il manque une accolade.
** Pas de libération (free()) du tableau alloué dynamiquement.
** Il ne faut pas hésiter à utiliser l'arithmétique des pointeurs exemple si texte = "bonjour bonsoir cava tres bien bon bye"
alors texte + 1 = "onjour bonsoir cava tres bien bon bye"
de plus les chaînes de caractères sont des tableaux de chars terminés par '\0' donc peut faire les choses suivantes :
1 2 3 4 5 6 7
|
char texte[] = "bonjour bonsoir cava tres bien bon bye";
char c = texte[4];
texte[4] = '\0';
// ici texte contient la chaîne "bonj"
texte[4] = c;
// ici la texte contient à nouveau la chaîne "bonjour bonsoir cava tres bien bon bye" |
Je pense t'avoir donné des éléments pour t'en sortir, n'hésite pas si quelque chose n'est pas clair.
Partager