Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Replace sir de caractere  (Citit de 3112 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Mitza444
Client obisnuit
**

Karma: 6
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« : Ianuarie 09, 2012, 13:29:16 »

Imi puteti da ceva idei cum s-ar putea rezolva aceasta problema(http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=124 ??Nu mi-a venit alta idee decat sa verific fiecare cuvant care trebuie cautat litera cu litera in textul dat si daca e la fel sa-l inlocuiesc.Numai ca daca cuvantul este mai mare sau mai mic decat cel inlocuit atunci ar trebui sa deplasez restul textului cu diferenta de lungime mai la dreapta sau la stanga dupa caz.Si nu cred ca e o idee optima  ca sa scot 100p. sad
Nu ar fi o alta modalitate mai rapida?? d'oh!
 
Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #1 : Ianuarie 09, 2012, 15:20:59 »

Pai fiecare cuvant il cauti in sirul curent cu functia strstr  si apoi tot inlocuiesti cu strncpy Thumb up
Memorat
Mitza444
Client obisnuit
**

Karma: 6
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #2 : Ianuarie 09, 2012, 19:15:07 »

Am facut cum ai zis,dar nu stiu de ce nu face nici o modificare. Brick wall
Si ar mai fi o problema daca ar merge.Am vazut pe exeplulul la functia strstr de pe c++ reference ca daca in locul cuvantului care tebuie inlocuit pun un cuvant mai mare strncpy imi inlocuieste si din alte cuvinte,sau daca e mai mic lasa litere in plus...
Cod:
#include<cstdio>
#include<cstring>
using namespace std;
char caut[10][80],inloc[10][80],cuv[260];
int n;
int main(){
int i;
int l;
char * p;
FILE * pFile;
pFile=fopen("replace.in","r");
fscanf(pFile,"%d\n",&n);
for(i=1;i<=n;i++){
fgets(caut[i],80,pFile);
fgets(inloc[i],80,pFile);
}
fgets(cuv,255,pFile);
for(i=1;i<=n;i++){
p=strstr(cuv,caut[i]);
while(p!=NULL){
l=strlen(inloc[i]);
strncpy(p,inloc[i],l);
}
}
pFile=fopen("replace.out","w");
fprintf(pFile,"%s",cuv);
return 0;
}

Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #3 : Ianuarie 09, 2012, 19:54:08 »

Am facut cum ai zis,dar nu stiu de ce nu face nici o modificare. Brick wall
Si ar mai fi o problema daca ar merge.Am vazut pe exeplulul la functia strstr de pe c++ reference ca daca in locul cuvantului care tebuie inlocuit pun un cuvant mai mare strncpy imi inlocuieste si din alte cuvinte,sau daca e mai mic lasa litere in plus...
Cod:
#include<cstdio>
#include<cstring>
using namespace std;
char caut[10][80],inloc[10][80],cuv[260];
int n;
int main(){
int i;
int l;
char * p;
FILE * pFile;
pFile=fopen("replace.in","r");
fscanf(pFile,"%d\n",&n);
for(i=1;i<=n;i++){
fgets(caut[i],80,pFile);
fgets(inloc[i],80,pFile);
}
fgets(cuv,255,pFile);
for(i=1;i<=n;i++){
p=strstr(cuv,caut[i]);
while(p!=NULL){
l=strlen(inloc[i]);
strncpy(p,inloc[i],l);
}
}
pFile=fopen("replace.out","w");
fprintf(pFile,"%s",cuv);
return 0;
}


Nu procedezi chiar corect.Ar trebui facut asa:
1.gasesc pozitia de inceput a cuvantului
2.copii sirul de dupa cuvantul respectiv intr-un alt sir de caractere
3.inlocuiesc cuvantul in primul sir
4.la finalul noului cuvant copii restul din sirul auxiliar

Cod:
        int i;
char *p;
for(i=1;i<=n;i++)
{
p=strstr(s,v1[i]);
while(p!=NULL)
{
strcpy(aux,p+strlen(v1[i]));
strncpy(p,v2[i],strlen(v2[i]));
strcpy(p+strlen(v2[i]),aux);
p=strstr(s,v1[i]);
}
}
unde v1[ i ] e cuvantul ce trebuie inlocuit,v2[ i ] e cuvantul care va fi pus in locul lui  Thumb up
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines