Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retourner la position d'un caractére dans une chaine

Sujet résolu
    27 février 2010 à 12:49:04

    Bonjour,

    Je cherche à retourner la position d'un caractére dans une chaine par exemple char chaine[]="salut";
    Si l'utilisateur tape s , ça donnera le s se trouve à chaine[0]

    avec un tableau de int il n'y a pas de problème par contre, ça bug avec des chaines de caractères on dirait :

    int i;
    int tab[T];
    int nombre_recherche=0;
    int nb=0;
     
    printf("Ce programme permet de trouver toutes les occurrences d'un nombre.\n");
    printf("Entrer 10 nombres:\n");
     
    for (i=0;i<T;i++)
    {
        printf("t[%d]: ",i);
        scanf("%d",&tab[i]);
    }
     
    printf("Entrez le nombre a rechercher : ");
    scanf("%d",&nombre_recherche);
     
    for (i=0;i<T;i++)
    {
        if (tab[i] == nombre_recherche)
        {
               
                   printf("t[%d],",i);
    			   nb++;
        }
    }
    printf("\n%d occurent(s) trouve(s).\n",nb);
    


    Voila je n'ai pas de problème par contre ici :

    char chaine[]="salut";
        char car[10];
        int i;
        char *rech=NULL;
        
        scanf("%s",car);
        rech=strstr(chaine,car);
        
        if (rech!= NULL)
        {
        	printf("lecture a partir de %s:  %s\n",car,rech+1);
        	for (i=0;chaine[i] != 0;i++) //Parcours toute la chaine
        	{
           		if (car[i]==chaine[i]) Si car à la position i est égal a a la chaine à la position i
    		printf("chaine[%d],",i);
        	}
        }
    


    Je vous remercie !
    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2010 à 12:54:55

      Déjà, si c'est un caractère qu'on doit taper c'est plutôt :
      char car;
      scanf("%c",&car);
      

      Et tu peux enlever "rech"...
      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2010 à 13:15:21

        Et si c'est une chaine par exemple "lut"
        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2010 à 19:07:27

          Bon je considère que c'est une question.
          /* on récupère une chaine comme ça : */
          char chaine[100] = ""; 
          scanf("%s", chaine);
          


          Sinon, pour rechercher un caractère et retourner la position dans la chaine, suffit de parcourir la chaine (comme un tableau), et si le caractère actuel de la chaine est égal au caractère à rechercher, on retourne l'indice du tableau.

          Je te conseille de faire ça dans une fonction plutôt que dans le main.
          J'ai codé rapidement ça, ne regarde que si tu as des soucis.
          int search (char *s, char carac)
          {
          	int i;
          	for(i = 0; s[i] != '\0';i++)
          		if(s[i] == carac)
          			return i;
          	return 0;
          }
          
          int main (void)
          {
          	char *s = "abcdefghijklmnopqrstuvwxyz";
          	char c = 'k';
          	int pos = search(s, c);
          
          	printf("caractere %c à la position %d, \ndans la chaine %s", c, pos, s);
          	return 0;
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2010 à 19:55:35

            Je crois qu'il voulait dire chercher la position de "lut" dans "salut". Mais sinon pour ton code Colb-Seton, on peut très bien utiliser memchr...
            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2010 à 19:58:40

              Citation : Boubz

              Je cherche à retourner la position d'un caractére dans une chaine par exemple char chaine[]="salut";
              Si l'utilisateur tape s , ça donnera le s se trouve à chaine[0]


              Et puis franchement, pour des fonctions aussi simple que celle là, je préfère y coder à la main.
              • Partager sur Facebook
              • Partager sur Twitter
                27 février 2010 à 20:06:55

                Citation : snake_48

                Mais sinon pour ton code Colb-Seton, on peut très bien utiliser memchr...

                Pas du tout memchr() retourne un pointeur...
                • Partager sur Facebook
                • Partager sur Twitter
                  27 février 2010 à 20:18:29

                  Est-ce que au moins tu as cliqué sur le lien ? Il y a un exemple qui montre comment obtenir la position d'une lettre à partir de cette fonction. Savais-tu que les chaînes de caractères étaient représentées par l'adresse de leur première case ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 février 2010 à 20:22:02

                    Citation : snake_48

                    Est-ce que au moins tu as cliqué sur le lien ? Il y a un exemple qui montre comment obtenir la position d'une lettre à partir de cette fonction. Savais-tu que les chaînes de caractères étaient représentées par l'adresse de leur première case ?


                    Pourquoi memchr, et pas strchr?

                    J'ai du mal à voir l'utilité de memchr. :-°
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Zeste de Savoir, le site qui en a dans le citron !
                      27 février 2010 à 20:25:57

                      Par exemple si c'est un tableau d'un autre type que char .
                      Après c'est vrai j'ai hésité à mettre strchr ^^ .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 février 2010 à 20:15:29

                        c'est bon j'ai compris c'etais aussi simple je te remercie Colb-Seton :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 octobre 2019 à 12:23:21

                          J'espère ne pas "merder" en déterrant ce POST mais je suis tombé dessus et j'avais besoin de rechercher la position d'un dernier caractère précis dans une chaine de caractère et j'ai vu qu'une fonction avait été proposée alors qu’apparemment (si je ne trompe pas) le code ci-dessous fonctionne pas mal (merci d'être tolérant je re-débute en C :) )

                          // Chaine à Traiter
                          char *chaineComplete = "Je cherche lA position du dernier A dans cette phrAse";
                          
                          // Détermination Position Premier A
                          int positionPremier = strlen(chaineComplete) - strlen(strchr(chaineComplete, 'A'));
                          
                          // Détermination Position Dernier A
                          int positionDernier = strlen(chaineComplete) - strlen(strrchr(chaineComplete, 'A'));
                          
                          printf("\n\nPosition Premier : %d", positionPremier);
                          printf("\n\nPosition Dernier : %d", positionDernier);


                          Avec un code qui tient en une ligne pour trouver ou le premier ou le dernier caractère dans la chaine.

                          -
                          Edité par Juanito de Dironne 24 octobre 2019 à 12:43:24

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Heureux les fêlés car ils laissent passer la lumière...

                          Retourner la position d'un caractére dans une chaine

                          × 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.
                          • Editeur
                          • Markdown