C : comment décaler des chaines

Résolu
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 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

9 réponses

Qwerti Messages postés 166 Date d'inscription   Statut Membre Dernière intervention   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
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   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
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   32
 
J'ai aussi penser à remplacer le contenu du caractere i par celui de i+1 mais sans résultat positif.
0
Qwerti Messages postés 166 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

a+
-Qwerti.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

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