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

 
Inserir un text

En aquesta pràctica implementarem la funció d'inserir una cadena en una altra.

 

Desenvolupament de la pràctica

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

//m6p05,cpp: Insereix una cadena en una altra

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

char *inserir (char*, int ,char*);

void main(void){
    char cad1[200];
    char cad2[20];
    int n;

    printf("\ncad1=..."); gets(cad1);
    printf("\ncad2=..."); gets(cad2);
    printf("cad1: %s\n",cad1);

    printf("\nn=..."); scanf("%d",&n);
    printf("\ncad1=%s\n",inserir(cad1,n,cad2));
}





char *inserir (char *cad1, int n, char *cad2){
    int i,pos;

    i=n;
    pos=strlen(cad2);
    for (i=strlen(cad1);i>=n;i--) cad1[i+pos]=cad1[i];
    for (i=0;i<pos;i++) cad1[n+i]=cad2[i];
    return cad1;
}

Explicació del programa

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

char *inserir(char *cad1, int n, char *cad2)

Aquesta funció insereix una cadena en una posició determinada d'una altra cadena. Per exemple, si la cadena cad1 conté: "Això és una prova i la cadena  cad2 conté: "no ", la funció inserir(cad2,5, cad1) farà que cad1 sigui: "Això no és una prova":

  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
cad1 A i x ò   é s   u n a   p r o v a \0            
cad2 n o   \0                                        
resultat i x ò   n o   é s   u n a   p r o v a \0      

La inserció es fa en dues fases: la primera fase desplaça els caràcters de cad1 que hi ha després de la posició n un nombre de posicions igual a la mida de la cadena cad2 (pos)

for (i=strlen(cad1);i>=n;i--) cad1[i+pos]=cad1[i];

La segona fase reemplaça els caràcters de les posicions n i següents de la cadena cad1 per la cadena cad2.

for (i=0;i<pos;i++) cad1[n+i]=cad2[i];

En la següent figura es mostra les dues fases d'aquesta inserció:

 
  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
cad1 A i x ò   é s   u n a   p r o v a \0            
cad2 n o   \0                                        
fase1 A i x ò   é s   é s   u n a   p r o v a \0      
fase2 A i x ò   n o   é s   u n a   p r o v a \0      

 

Aquesta funció no fa comprovació de límits. En el cas que la suma de les mides de cad1 i cad2 fos superior a la mida màxima de cad1 es produiria un error en temps d'execució.