[C] Rotation d'une chaine de caractère
Bonjour à tous,
Voilà j'ai un petit soucis dans mon code.
Dans l'éxecution de mon programme (en C) je dois effectuer une rotation
à droite par quartets d'une chaine de caractères.
Voilà l'exemple :
1er carac 2eme carac 3eme carac .....
aaaa bbbb | cccc dddd | eeee ffff .....
Une fois la rotation effectuée la chaine à cette tête là :
1er carac 2eme carac 3eme carac ....
ffff aaaa | bbbb cccc | dddd eeee .....
et là j'avoue que je sêche un peu... auriez vous quelques idées ?
Merci beaucoup
Romain
Voilà j'ai un petit soucis dans mon code.
Dans l'éxecution de mon programme (en C) je dois effectuer une rotation
à droite par quartets d'une chaine de caractères.
Voilà l'exemple :
1er carac 2eme carac 3eme carac .....
aaaa bbbb | cccc dddd | eeee ffff .....
Une fois la rotation effectuée la chaine à cette tête là :
1er carac 2eme carac 3eme carac ....
ffff aaaa | bbbb cccc | dddd eeee .....
et là j'avoue que je sêche un peu... auriez vous quelques idées ?
Merci beaucoup
Romain
A voir également:
- Rotchar
- Rotation ecran windows - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Rotation video - Guide
4 réponses
Je te propose un code dans ce genre :
Ce qui donne à l'exécution :
Bonne chance
#include <stdio.h>
#include <stdlib.h>
void strcpy_dec(char *dst,const char *src,unsigned decalage){
unsigned i,n = strlen(src);
for(i=0;i<n;++i) dst[i] = src[(i+decalage)%n];
dst[n] = '\0';
}
int main(){
char *str="aaaabbbbccccdddd";
char *tmp = (char *)malloc((strlen(str)+1)*sizeof(char));
strcpy_dec(tmp,str,4);
printf("str = %s\n",str);
printf("tmp = %s\n",tmp);
free(tmp);
return 0;
}
Ce qui donne à l'exécution :
(mando@aldur) (~) $ gcc -W -Wall -g plop.c (mando@aldur) (~) $ ./a.out str = aaaabbbbccccdddd tmp = bbbbccccddddaaaa
Bonne chance
j'avais fait quelque chose de cette ordre là :
void RotationQuartet(char *Chaine, int TailleChaine) { int iIndex = 0; char *ChaineDecalee = NULL; // Allocation de la mémoire pour la chaine "rotationnée" ChaineDecalee = (char *)malloc(TailleChaine*sizeof(char)+1); // Rotation quarter par quartet vers la droite // On sauvegarde les quatres derniers bits que l'on place au début de la nouvelle chaine for(iIndex=0; iIndex<4; iIndex++) ChaineDecalee[iIndex] = Chaine[TailleChaine-4+iIndex]; // Maintenant on décale tous les autres bits de la chaine à envoyée strncat(ChaineDecalee, Chaine, TailleChaine-4); // On fait pointer la nouvelle chaine sur l'ancienne tout en libérant la mémoire occupée Chaine = NULL; Chaine = ChaineDecalee; free(ChaineDecalee); }Mais j'ai pas passé en paramètre la valeur du décalage.
Merci
Est ce qu'il suffit de faire : for(i=0;i<n;++i) dst[i] = src[(i-decalage)%n]; ?
Merci