Enrere Mòdul 6
Fonaments de programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
Reemplaçar part d'una cadena per una altra

En aquesta pràctica implementarem una útil funció de reemplaçament d'una part d'una cadena per una altra.

 

Desenvolupament de la pràctica

Definiu un projecte nou anomenat m6p07 i afegiu-li un arxiu de font C/C++ anomenat m6p07.cpp. Escriviu el següent codi:

// m5p07 reemplaçar subcadena

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


char *reempl(char*, char*,int n);

void main (void){
    char text[200];
    char subcadena[10];
    int n;

    printf("Teclegi el Text:\n");
    gets(text);

    printf("Teclegi la subcadena:\n");
    gets(subcadena);

    printf("Posició...\n");
    scanf("%d",&n);

    reempl(text, subcadena, n);
    printf("text=%s\n\n",text);

}

char *reempl(char *text, char *subcadena,int n){ 
    char *p;
    unsigned int i;

    p=text+n;

    for(i=0; i<strlen(subcadena);i++) *(p+i)=subcadena[i];

    return text;
}

Explicació del programa

En aquest programa s'implementa la funció reempl que té el protocol:

char *reempl(char *text, char *subcadena,int n)

És, per tant, una funció que retorna una cadena (la mateixa cadena text) i reemplaça caràcters de la cadena text per la cadena subcadena a partir de la posició n. Per exemple: si text conté la cadena "Això és una prova" i subcadena conté "dos". La funció reempl(text,subcadena,8) canviarà el contingut de text per: "Això és dos prova".

 
  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
text A i x ò   é s   u n a   p r o v a \0    
subcadena d o s \0                                
resultat A i x ò   é s   d o s   p r o v a \0    

La línia de codi que fa aquest reemplaçament és:

 
for(i=0; i<strlen(subcadena);i++) *(p+i)=subcadena[i];

on p és un punter que apunta a la primera posició del text que s'ha de reemplaçar.

S'ha d'observar que aquesta funció no fa comprovació de límits. Si la subcadena o el valor de n són massa grans es pot sobreescriure part de la memòria no reservada per la cadena text.