SVP j'essaie de trouver l'indice minimum d'un caractère qui existe deux fois dans ma chaine mais je n'y arrive pas, voici mon code (indiceMin me retourne toujours 0). Dans mon code je cherche l'indice du caractère "m" il y a 14 et 15 mais moi je souhaite qu'il me retourne l'indice le plus petit ==> 14.
j’apprécie tout aide et merci d'avance.
int main() {
char chaine[100]= "quel sinistre mmot!";
int i, indice1, indice2;
int n=strlen(chaine);
int indiceMin=0;
for (i=0; i<n; i++){
if (chaine[i]=='m'){
indice1=i;
//printf("%d", indice1);
}
if (indice1<=indiceMin){
indiceMin=indice1;
}
}
printf("%d", indiceMin);
}
Avec 4 variables i, indice1, indice2, indiceMin qui peuvent servir d'indice dans le tableau, tu as fait ce qu'il fallait pour arriver à t'y perdre tout seul.
Admettons que ça soit indiceMin que tu cherches. Comme i va en grandissant, dès que chaine[i] contient ce que tu cherches, c'est bon tu l'as, tu peux poser indiceMin = i et arrêter la boucle.
Il y a des cas où le caractère cherché n'est pas dans la chaîne. Et ce n'est pas la même chose que d'avoir l'indiceMin égal à 0 (qui est indice du premier caractère).
La solution traditionnelle est de choisi, dans ce cas, une "valeur impossible" (out of band) comme -1 pour indiquer, par convention, qu'on n'a pas trouvé.
- Edité par michelbillaud 25 octobre 2021 à 16:25:15
#include <stdio.h>
#include <string.h>
int main(void)
{
char chaine[100]= "quel sinistre mmot!";
int n=strlen(chaine);
int i=0;
for (i=0; i<n; i++) if (chaine[i]=='m') break;
if(i==n) printf("Caractere absent.");
else printf("caractere à la position %d", i);
return 0;
}
Comme le PO utilise strlen() dans son code initial, j'imagine qu'il pourrait utiliser strchr() de la bibliothèque standard, pour trouver le pointeur vers la première occurrence et, si elle existe, faire une soustraction pour obtenir l'information recherchée (comme le propose edgarjacobs).
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "quel sinistre mmot!";
char * p = strchr(str,'m');
if(p)
printf("trouve en %d\n",(int)(p-str));
else
puts("pas trouve");
return 0;
}
Ou, si on tombe sur des sectaires qui refusent les breaks à cause des Saintes Ecritures de Dijkstra dont ils n'ont en réalité jamais lu un traître mot :
int indiceMinimum = -1;
for (int i=0; indiceMinimum < 0 && tableau[i]; i++) {
if(tableau[i] == valeur) {
indiceMinimum = i;
}
}
if (indiceMinimum < 0)
printf("Pas trouvé\n"0);
else
printf("l'indice minimum est %d\n", indiceMinimum);
}
Autre solution, utilisation conjointe d'un booléen qui indique si indiceMinimum a un sens ou pas. Il passe à vrai quand on a trouvé, alors on l'appelle trouvé, pas bête, hein :
bool trouve = false;
int indiceMinimum = -1;
for (int i=0; ! trouve && tableau[i]; i++) {
if (tableau[i] == valeur) {
indiceMinimum = i;
trouve = true;
}
}
if (trouve) {
printf("l'indice minimum est %d\n", indiceMinimum);
} else {
printf("Pas trouvé\n");
}
- Edité par michelbillaud 25 octobre 2021 à 17:59:14
@michelbillaud: J'aime! Surtout la première version (je n'ai rien contre les bool, la première est plus courte, c'est tout ...)
La paresse est la mère de tous les vices ... bool trouve = false; int indiceMinimum; for(indiceMinimum=0; !trouve && tableau[indiceMinimum]; indiceMinimum++) { if (tableau[indiceMinimum] == valeur) trouve = true; } if(trouve) printf("L'indice minimum est %d\n", indiceMinimum - 1); else printf("Pas trouvé\n");
Ou bien: int indiceMinimum = 0; while(tableau[indiceMinimum] && tableau[indiceMinimum] != valeur) indiceMinimum++; if(tableau[indiceMinimum]) printf("L'indice minimum est %d\n" indiceMinimum); else printf("Pas trouvé\n");
Et si on paie 20 euros la ligne ... int indiceMinimum = 0; while(tableau[indiceMinimum] && tableau[indiceMinimum] != valeur) indiceMinimum++; printf((tableau[indiceMinimum]) ? "L'indice minimum est %d\n" : "Pas trouvé", indiceMinimum);
- Edité par PierrotLeFou 25 octobre 2021 à 19:13:41
Le Tout est souvent plus grand que la somme de ses parties.
On t'a montré que c'était possible de faire autrement.
Le Tout est souvent plus grand que la somme de ses parties.
indice minimum d'un caractere
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.