begin process at 2012 05 29 12:37:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

modification partielle d'une chaine


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

modification partielle d'une chaine

mardi 16 mars 2010 à 12:44:30 | modification partielle d'une chaine

fadiam

bonjour

Voici un un morceau de code qui réorganise une chaine de caractères(numéro de téléphone) en ajoutant des espaces s'il n'y en a pas.
ex : 12345678 : 12 34 56 78 // 123456789 : 1 23 45 67 89( chaine impaire).
Code C/C++ :
char * ret;
   int n = strlen(chaine);
   int i,j;
   int compteur;
 
   ret=malloc(sizeof(*ret) * (n + n / 2 + 1));
 
   compteur = n % 2;
   for(j=0, i=0;chaine[i]; i++, j++)
   {
      ret[j] = chaine[i];
      compteur++;
      if (compteur == 2)
      {
          compteur = 0;
          ret[j+1] = '-';
          j++;
      }
   }
   ret[j-1] = '\0';


ici c'est toute la chaine qui est modifiée.

je voudrai maintenant pouvoir modifier la chaine si une sous chaine(entre les espaces) dépasse 4 caractères, une modification partielle en fait!

01 45345 123 1234 : 01 4 53 45 123 1234 (sous chaine paire)

01124 12 1345673 1234 : 0 11 24 12 1 34 56 73 1234 (sous chaine impaire)

j'espere avoir été assez clair. des idées?
merci
mardi 16 mars 2010 à 13:48:21 | Re : modification partielle d'une chaine

deadhand

Salut !

Tu peux tester du premier caractère jusqu'au prochain espace et si cette sous-chaine n'est pas de logueur superieur à 2 tu ne fais rien mais sinon tu relances pour cette sous-chaines le code que tu as fait ci-dessus. Enfin tu l'ajoute à ta chaine totale et tu passe à la sous-chaine suivante.

J'espère t'avoir aidé même si je ne suis pas sur d'avoir repondu exactement à ta demande.
mardi 16 mars 2010 à 16:24:04 | Re : modification partielle d'une chaine

fadiam

salut

justement, j'ai pensé à compter le nombre de caractères entre chaques espaces. Si ce nombre>4, alors j'extrais cette sous chaine avec str_sub pour la modifier. après je la replace dans une nouvelle chaine dans laquelle on copie le reste de l'ancienne chaine.

Code C/C++ :
char chaine[LGMAX+1];
char temp[LGMAX+1]="";
char *sous_chaine;
int fin=0;
int n=strlen(chaine);

while(i<=n)
{
        compteur++;  //compte le nombre de caractères
	if(chaine[i]=='-' || chaine[i]=='\0') // '\0' pour la derniere sous chaine
	{
		compteur--;  //pour enlever le '-'

		if(compteur>4)
                {
		        fin=i-1;
			sous_chaine=str_sub(chaine,i-compteur , fin);
			sous_chaine=segment(chr);

                }


voila, la (ou les?)sous chaine fautive a été démasquée. Comment réecrire la chaine originale avec les modifications, si j'appelle ma fonction décrite plus haut?
mercredi 17 mars 2010 à 09:05:34 | Re : modification partielle d'une chaine

deadhand

Eh bien, c'est juste un petit problème algorithmique.
-Tu connais la position du premier chactère de la sous-chaine dans la première : premierCharactèrePrimaire
-Tu connais la position du premier charactère de la sous-chaine dans le résultat final : premierCharactère
-Tu connais la taille de la sous-chaine avant modification :tailleSousChaineAvantModif
-Tu connais la taille de la sous-chaine après modification : tailleDeLaSousChaineAprèsModif
Donc :
depuis i=premierCharactère jusqu'a tailleDeLaSousChaineAprèsModif
nouvelleChaine[i] = sousChaine[i-premierCharactère]
finDeLaBoucle
On continue ton code depuis l'indice = premierCharactèrePrimaire+tailleSousChaineAvantModif

Voilà ! Ca répond t-il à été question ?


Cette discussion est classée dans : chaine, compteur, red, color, ret


Répondre à ce message

Sujets en rapport avec ce message

compteur de chaine de caractere [ par yous1984 ] salut je suis debutant en C++ je voudrais s'avoir ce que je dois faire pr avoir un compteur qui compte le nombre maximum de caractere B consécutif da Chaine de carractere en VC++6.0 avec la console Win32 [ par Adeon ] Adeon J'ai 2-3 questions sur les chaines de carracteres:- Y a t-il une fonction qui fait un truc dans ce genre sauf calcul le nombre de fois que chaque lettre apparait [ par kev162 ] voila mon programme mais je narrive pas a calculer le nombre de fois que la lettre apparait#include #include #include #include int Nb calcul le nombre de fois que chaque lettre apparait dans une autre chaine [ par kev162 ] please help meje n'arrive pa a afficher mon resultat sur 2 chiffres celui ci est 00  car je pense que je n'arrive pas a compter le nombre d'occurence enlever le 1er carctère d'une chaine... [ par Guidelor ] BONJOUR A TOUS !j'ai fait un prog avec Dev-C++ où un moment l'utilisateur tape une chaine type a7 ou g13la premiere lettre correspond à Copier / coller un dossier en entier [ par roxod ] Bonjour, J'ai besoin de copier un dossier contenant des fichiers et des sous dossiers. Mon code : FILE *fds, *fdd; int value; fds = fopen(" Générer un arbre binaire à partir de deux parcours définis [ par Blonf ] Bonjour, Tout d'abord, étant nouveau, je tiens vivement à remercier les créateurs de ce forum d'entre-aide génial. Dans le cadre d'un TP de programm [Aide]Foutu erreur de Link avec mySQL et VS2008 [ par Nixeus ] Bonjour à tous, Avant de commencer, je tiens à dire que j'ai cherché pas mal de temps sur forum et autres sites, ne trouvant pas de solution, je m'en Fonction sscanf récuperer un nombre dans une chaine de caractère [ par twintornado ] Bonjour bonjour, voici mon problème : je n'arrive pas a récupérer un nombre dans une chaine, voici mon code : #include #include int main() { flo


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales