C : comment décaler des chaines

Résolu
Bonjour,
J'ai une chaine de caractere et je souhaite enlever tous les caracteres qui ne sont pas des lettre majuscules.
J'ai cherché les codes ACSII des maj et ils sont entre 65 et 90.
mon bout de prg ressmeble à ça :

char[100] caractere;
for(int i=0;i<100;i++)
{
if(caractere[i]<65 || caractere[i]>90) // Si on a pas de majuscules à i
{
caractere[i]=''; // ce sont 2 ' et non 1 ".
}
}

le problème c'est que l ecompilateur n'aime pas ce que je fait dans mon if il dit qu'il manque quelque chose entre les 2 '
Si quelqu'un pouvais m'aider ce serait cool.
merci
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. Salut,

    Essaye :

    caractere[i] = '\0' ;

    Mais je ne sais pas trop ce que tu veux exactement...

    Si tu fais ca, tu auras peut-etre des surprises.... est-ce que tu veux juste eliminer les non-majucules ? Par exemple ceci :

    QWERTIxESTxGENTIL ---> QWERTIESTGENTIL

    ou est-ce que tu veux cela :

    QWERTIxESTxGENTIL ---> QWERTI

    Si tu veux le premier cas, il suffit de ne pas incrementer i lorsque ce n'est pas une majuscule...

    a+
    -Qwerti.
    0
    1. j'aimerai obtenir ça par exemple :

      GHDBFJDSBpohpg4512g1hùù!:</*-JKUY
      devienne
      GHDBFJDSBJKUY

      voilà mais j'avais déja essayé l'antislashe 0 mais la chiane se termine et donc j'ai plus du tout de caractère.
      0
      1. J'ai aussi penser à remplacer le contenu du caractere i par celui de i+1 mais sans résultat positif.
        0
        1. EXACTEMENT !!! tu as tout compris !!!

          Donc ce que tu peux essayer c'est un array temporaire

          char tmp[100];

          Tu ne copies dans tmp QUE les majuscules et a la fin tu mets un beau '\0'. Et apres tu copie tmp dans caractere.

          Je pense que tu vas y arriver !

          Tiens-nous au courant.

          a+
          -Qwerti.
          0
          1. ok merci en faite c'était pas très compliqué mais fallait y penser.
            c'est pas tout a fait résolu mais je sait ce qu'il va pas mais sinon merci a toi pour m'avoir aidé Qwerti.
            a++++
            0
            1. Poste-nous la solution quand tu auras fini, ca pourra toujours servir a quelqu'un s'il fait une recherche.

              a+
              -Qwerti.
              0
              1. Modérateur
                Salut,

                voilà sans une chaîne temporaire

                lami20j@debserv:~/trash$ cat ccm.c
                #include <stdio.h>
                
                int main ()
                {
                  char chaine[] = "GHDBFJDSBpohpg4512g1hùù!:</*-JKUY ";
                  int i, j;
                
                  printf ("%s\n", chaine);
                
                  for (i = j = 0; chaine[i] != '\0'; ++i)
                    if (chaine[i] >= 65 && chaine[i] <= 90)
                      chaine[j++] = chaine[i];
                  chaine[j] = '\0';
                
                  printf ("%s\n", chaine);
                  return 0;
                }
                Compilation et exécution
                lami20j@debserv:~/trash$ gcc ccm.c
                lami20j@debserv:~/trash$ ./a.out
                GHDBFJDSBpohpg4512g1hùù!:</*-JKUY
                GHDBFJDSBJKUY
                0
                1. l'ami20j ta solution est rès pratique car la mienne devait ensuite traiter quelques autres cas avec des if qui n'étaient pas très beaux
                  merci pour tout !
                  0
                  1. Modérateur
                    Salut,

                    de rien ;-)
                    je met résolu.
                    0