Rechercher et remplacer un motif dans une chaine.

Soyez le premier à donner votre avis sur cette source.

Vue 5 974 fois - Téléchargée 279 fois

Description

Se trouve aussi ici: http://www.dev.winsysdev.com/

Voici une fonction qui permet de rechercher et de de remplacer un motif dans une chaine de caractères.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

int lsa_replace(char *Text, char *Motif, char *Replace);

int main(int argc, char *argv[])
{
	int iReplace;
	
	char szMotif[255];
	char szReplace[255];

	char *szText;

	szText = (char *)malloc(sizeof(char *) * 1024);
	if(!szText) { printf("Erreur d'allocation mémoire."); return 0; }

	strcpy(szText, "Ceci est un petit test ! :) Comment allez vous ?");

	printf("Motif a rechercher (255) :\n");
	scanf("%s", &szMotif);

	printf("Remplacer par (255) :\n");
	scanf("%s", &szReplace);

	iReplace = lsa_replace(szText, (char *)&szMotif, (char *)&szReplace); 
	printf("\n\nResultat (%i remplacements effectues) :\n%s", iReplace, szText);

	free(szText);

	// Quit
	int end;
	printf("\n\n");
	scanf("%i", &end);
	
	return 0;
}

int lsa_replace(char *Text, char *Motif, char *Replace)
{
	char *szNewStr;
	int iLenNewStr = strlen(Text);
	int i, j, k, iReplace=0;

	szNewStr = (char *)malloc(sizeof(char *) * iLenNewStr);
	if(!szNewStr) { return 0; }

	for(i=0; Text[i]; i++)
	{
		if(Text[i] == Motif[0])
		{
			for(j=1; Motif[j] && (Motif[j] == Text[i+j]); j++);
			if(Motif[j] == '\0') // Ok
			{
				iReplace++;

				for(k=0; Text[k+i+j]; k++)
					szNewStr[k] = Text[k+i+j];
				szNewStr[k] = '\0';
				
				for(k=0; Replace[k]; k++,i++)
					Text[i] = Replace[k];
				for(k=0; szNewStr[k]; k++)
					Text[i+k] = szNewStr[k];
				Text[i+k] = '\0';
				i--;
			}
		}
	}

	free(szNewStr);

	return iReplace;
}

Conclusion :


Amusez-vous bien.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
mohamedsnina Messages postés 2 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 avril 2010
4 avril 2010 à 11:17
c'est un tres bon code
mais comment peut on modifier la fonction isa_remplace pour chercher l'indice d'une seule lettre dans un motif et la remplacer par une autre lettre
Cethywolf Messages postés 21 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 23 juillet 2006
23 juil. 2006 à 21:33
Rectification, ne fonctionne pas si on mets une trop longue chaîne à remplacer.

Tu devrais voir du côté de realloc, même si c'est lourd, je vois comment faire autrement.
Cethywolf Messages postés 21 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 23 juillet 2006
23 juil. 2006 à 21:31
A l'air de bien fonctionner sur VC++6, merci :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.