begin process at 2010 09 03 03:13:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > FONCTION : CHAR * AJUSTERTAILLECHAINE()

FONCTION : CHAR * AJUSTERTAILLECHAINE()


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caractères Classé sous :ajuster, chaine, modifier, agrandir, reduire Niveau :Débutant Date de création :12/03/2010 Date de mise à jour :12/03/2010 12:30:31 Vu :864

Auteur : Rockanos

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cette fonction permet de retirer une partie de chaine de caractère ou d'espacer la chaine a partir d'un certain point et d'une certaine longueur.

Source

  • char * AjusterTailleChaine(char * Chaine, long PositionAjustement, long NDeplacement)
  • {
  • if ((Chaine[0]=='\0')||(PositionAjustement<0))
  • {
  • return Chaine;
  • }
  • if (NDeplacement==0)
  • {
  • return Chaine;
  • }
  • long LongChaine=strlen(Chaine);
  • long IndiceGauche;
  • long IndiceDroit;
  • char* chaineCopie;
  • if (NDeplacement<0)
  • {
  • IndiceDroit = 0;
  • IndiceGauche = 0 ;
  • chaineCopie = (char*) malloc(((strlen(Chaine) + NDeplacement) * sizeof(char)));
  • while(Chaine[IndiceDroit] != '\0')
  • {
  • if((IndiceDroit<PositionAjustement)||(IndiceDroit>=PositionAjustement-NDeplacement))
  • {
  • chaineCopie[IndiceGauche]= Chaine[IndiceDroit];
  • IndiceGauche= IndiceGauche + 1;
  • }
  • IndiceDroit= IndiceDroit + 1;
  • }
  • chaineCopie[IndiceGauche]= '\0';//Chaine[IndiceDroit]; // Refermer la chaine par un EOS
  • return chaineCopie ;
  • }
  • if (NDeplacement>0)
  • {
  • int Taille = strlen(Chaine)-1;
  • chaineCopie = (char*) malloc((Taille + NDeplacement) * sizeof(char));
  • int Indice= Taille;
  • strcpy(chaineCopie, Chaine);
  • chaineCopie[Indice + NDeplacement + 1] = 0;
  • while(Indice >= PositionAjustement )
  • {
  • chaineCopie[Indice + NDeplacement] = Chaine[Indice];
  • Indice--;
  • }
  • for(int i = 0; i < NDeplacement ; i++)
  • {
  • chaineCopie[PositionAjustement + i] = ' ';
  • }
  • return chaineCopie;
  • }
  • }
 char * AjusterTailleChaine(char * Chaine, long PositionAjustement, long NDeplacement)
{	
	if ((Chaine[0]=='\0')||(PositionAjustement<0))
	{
		return Chaine;
	}
	
	if (NDeplacement==0)
	{
		return Chaine;
	}
	long LongChaine=strlen(Chaine);
	long IndiceGauche;
	long IndiceDroit;
	char* chaineCopie;
	
	if (NDeplacement<0)
	{
		IndiceDroit = 0;
		IndiceGauche = 0 ;
		chaineCopie = (char*) malloc(((strlen(Chaine) + NDeplacement) * sizeof(char)));
		
		while(Chaine[IndiceDroit] != '\0')
		{
			if((IndiceDroit<PositionAjustement)||(IndiceDroit>=PositionAjustement-NDeplacement))
			{
				chaineCopie[IndiceGauche]=  Chaine[IndiceDroit];
				IndiceGauche= IndiceGauche + 1;
			}
			
			
			IndiceDroit= IndiceDroit + 1;			
		}
		chaineCopie[IndiceGauche]=  '\0';//Chaine[IndiceDroit]; // Refermer la chaine par un EOS
		return chaineCopie ;
	}

	if (NDeplacement>0)
	{
		int Taille = strlen(Chaine)-1;
		chaineCopie = (char*) malloc((Taille + NDeplacement) * sizeof(char)); 
		int Indice= Taille;
		strcpy(chaineCopie, Chaine);
		chaineCopie[Indice + NDeplacement + 1] = 0;
		while(Indice >= PositionAjustement )
		{
			chaineCopie[Indice + NDeplacement] =  Chaine[Indice];
			Indice--;			
		}
		for(int i = 0; i < NDeplacement ; i++)
		{
			chaineCopie[PositionAjustement + i] = ' ';
		}
		return chaineCopie;
	
	}
}



 Historique

12 mars 2010 12:30:31 :
J'avais créé une fonction "LongueurChaine()" qui était utilisé dans cette fonction. J'ai changer ceux-ci en "strlen()"

 Sources de la même categorie

Source avec Zip LIBRAIRIE LANGUAGES par astro53
Source avec Zip RECHERCHE D'ANNAGRAMMES par Torin
GESTION DE CHAINE DE CARACTÉRE EN C++ AVEC NSTRING par xmustapha
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript

 Sources en rapport avec celle ci

Source avec Zip GESTION DES NOTES D'UNE CLASSE par scicasoft
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript
Source avec Zip MYSTRING, CLASSE TRAITANT DES CHAÎNES DE CARACTÈRES par Noubzor
Source avec Zip Source avec une capture CHAINE EN HEXA (WIN32) par BruNews
Source avec Zip Source avec une capture [C/WIN32] GÉNÉRATEUR DE CODE POUR UNE INITIALISATION SPÉCIAL... par deck_bsd

Commentaires et avis

Commentaire de uaip le 12/03/2010 13:49:36

Salut,
J'ai regardé le code en speed...

if ((Chaine[0]=='\0')||(PositionAjustement<0))
{
return Chaine;
}
if (NDeplacement==0)
{
return Chaine;
}
devient
if ((Chaine[0]=='\0') || (PositionAjustement<0) || (NDeplacement==0)) return Chaine;

if (NDeplacement<0) ...
if (NDeplacement>0) ...
devient
if (NDeplacement<0) ...
else ...
(puisque NDeplacement != 0 dès le départ)

sizeof(char) = 1, si je dis pas de connerie, sous n'importe quel OS
Et tu oublies le +1 dans le malloc, non ?
Et je ne sais plus si strcpy insère le '\0'.

Bref, je dois y aller, bonne continuation.

Commentaire de tibur le 13/03/2010 03:55:00

Hello,

Que fait le client de ta fonction quant à la chaine retournée ? Logiquement, il se doit de faire un free dessus, non ? Or si tu renvois la chaine passée en paramètre comme lorsque tu fais :
if(NDeplacement==0){return Chaine;}
ton client va faire un free de sa propre chaine.
Ça va pas bien se passer :
* soit un double free
* soit un free d'une chaine constante

Il faut que le comportement de ta fonction soit identique quel que soit les arguments. C'est à dire : allouer une chaine dans tous les cas.
Tib.

Commentaire de uaip le 13/03/2010 11:17:07

C'est pas faux. Pour se faire, Il peut utiliser return strdup(Chaine);

Commentaire de Yuzuru le 18/03/2010 17:41:11

le strcpy insère bien '\0'. Je ne fais que retirer le doute de uaip. Sinon je ne vois pas ce qui y a dire de plus que les précédents.

Yuzu

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Modifier un caractere dans une chaine [ par floche ] Bonjours &#224; tous Le titre est assez explicite... Je voudrais pouvoir changer un caractere d une chaine si c'est un a mais ca ne marche pas. Merci Ouvrir un fichier le modifier puis l exporter [ par adess00 ] SalutJ ouvre un fichier en binaire comme ceci ftoc=fopen(chem,"rb");ensuite je voudrai lire les donnees ki sont dans ce fichier par bloc compri entre transformer "bbbb" en "bbbb0000" [ par khamine ] salut tous le monde;je veux completer une chaine de caractere d'une taille &lt; a 8 par des 0 du cot&#233; droit jusqu'avoir 8 caracteres j'ai utilis& Probleme Equation C++/C [ par Ombreee ] Bonjour,Voila j'aimerai savoir si il existe une LIB ou autre qui me permetrai de resoudre une equation du premier degre a partire d'une chaine ??? Ou rechercher chaine de caractere dans texte [ par melkiorlenecrarque ] Bonjour! Je dois rechercher une chaine de caractere dans un buffer, Quelle est la maniere la plus optimis&#233;e, sachant que je programme avec les a imprimer une chaine de car [ par isirnet ] je suis débutant en c, je cherche un petit programme pour imprimer des chaine de caractères. Sous classement editbox [ par julienbj ] Je cherche &#224; sous classer une editbox pour modifier son affichage. Je sous classe donc le message WM_PAINT pour pouvoir modifier l'apparence de l ComboBox & CB_GETLBTEXT [ par Zootella ] Salut tout le monde, comment utiliser CB_GETLBTEXT (retrouve la chaine d'un objet dans le combobox). je fais comme ceci : char * chaine; SendMessag effacement definitif d'une chaine char* [ par ebooserge ] salut a tous, voila j'ai un petit avec quelques fondamentaux je cr&#233;e une chaine avec char *chaine;pour pouvoir l'utiliser dans une boucle et recu Fusion Chaine de caractère [C++] [ par neodynium ] Bonjour quelqu'un pourrais t'il me traduire cette portion de code en C++? mercidim Chaine,Chaine2 as stringChaine = Chaine &amp; Chaine2Je n'arrive pa


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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,655 sec (3)

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