C : comment décaler des chaines

Résolu
jerémiethe7 Messages postés 153 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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. Qwerti Messages postés 166 Statut Membre 85
     
    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
  2. jerémiethe7 Messages postés 153 Statut Membre 32
     
    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
  3. jerémiethe7 Messages postés 153 Statut Membre 32
     
    J'ai aussi penser à remplacer le contenu du caractere i par celui de i+1 mais sans résultat positif.
    0
  4. Qwerti Messages postés 166 Statut Membre 85
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jerémiethe7 Messages postés 153 Statut Membre 32
     
    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
  7. Qwerti Messages postés 166 Statut Membre 85
     
    Poste-nous la solution quand tu auras fini, ca pourra toujours servir a quelqu'un s'il fait une recherche.

    a+
    -Qwerti.
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  9. jerémiethe7 Messages postés 153 Statut Membre 32
     
    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
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

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