infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: BloodyF din Decembrie 19, 2008, 16:59:52



Titlul: Problema urgenta :D
Scris de: BloodyF din Decembrie 19, 2008, 16:59:52
Am si eu o problema sunt in clasa a x-a si eu si nu stiu cum sa fac sa mearga un algoritm care ma ajuta plz imi trebuie acu :( adica pana in ora 6 nu mai stiu ce sa ii fac :

Enunt: Se cit 2 siruri de caract de la tast. SA se afiseze cuvintele comune.
Cod:
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
clrscr();
//Am incercat sa il fac dar pur si simplu nu gasesc cum. De o zi jumatate stau la el si nu mai am idei cum sa il fac...
//... am incercat sa il testez cu watch .. nimic. Imi sare peste cuvinte si nu le compara ... nu mai am nici o idee ...
char s1[256],s2[256],s3[]=" .,!?",*p,*o;  int i,gasit;
cout<<"Introduceti primul text de la tastatura : \n";
cin.get(s1,255); cin.get();
cout<<"\n\nIntroduceti al doilea text de la tastatura : \n";
cin.get(s2,255); cin.get();
cout<<"\n\nCuvintele comune sunt : ";
p=strtok(s1,s3); o=strtok(s2,s3);
while (p)
{
 if (stricmp(p,o)==0)
     cout<<p<<"\n";
 //o=o+1;
 //o=strchr(o,NULL)+1; o=strtok(o,s3);
 o=strtok(NULL,s3);
 if (!(o))
 { // p=p+1;
   // p=strchr(p,NULL)+1; p=strtok(p,s3);
   p=strtok(NULL,s3);
   o=s2; } }
getch();
}

vreau si eu sugestii ca sa mearga sau daca nu o metoda noua ...


Titlul: Răspuns: Problema urgenta :D
Scris de: Andrei Misarca din Decembrie 19, 2008, 17:13:27
Incearca sa iti faci un sir cu cuvintele celor doua texte, iar apoi cauti fiecare cuvant al primului text in cel de-al doilea text, si daca exista, il afisezi :D


Titlul: Răspuns: Problema urgenta :D
Scris de: BloodyF din Decembrie 19, 2008, 17:15:41
hehe pai daca l-ai baga in C++ ai vedea in watch ca mie imi sare peste cuvinte deci eu le pun acolo dar el nu afiseaza nimic incearca sa vezi cum o sa te roada problema asta .. sau scrie si mie o metoda cum sa fac altfel plz


Titlul: Răspuns: Problema urgenta :D
Scris de: Andrei Misarca din Decembrie 19, 2008, 17:18:48
Din cate vad tu desparti in cuvinte cele doua siruri in acelasi timp(ceea ce nu este foarte indicat, fiind doarte posibil sa crape). Incearca sa-l desparti pe primul si apoi pe al doilea


Titlul: Răspuns: Problema urgenta :D
Scris de: BloodyF din Decembrie 19, 2008, 17:20:33
ok si daca eu il despart pe primul si dupa pe al doilea cum fac asta ... ca mi-au pierit toate ideile ... nu inteleg cum as putea sa fac decat cu 2 while dar deja imi bubuie capu ...


Titlul: Răspuns: Problema urgenta :D
Scris de: Andrei Misarca din Decembrie 19, 2008, 17:25:57
Cod:
char m1[30][256]; //in acest sir de stringuri vei retine cuvintele din s1
char m2[30][256]; //in acest sir de stringuri vei retine cuvintele din s2
int n1 = 0, n2 = 0; // numaru de cuvinte din cele doua siruri

char *p = strtok(s1, s3);
while(p)
{
    strcpy(m1[++n1], p);
    p = strtok(NULL, s3);
}

//Analog si pentru s2
//iar de aici compari fiecare cuvant din m1 cu fiecare cuvant din m2, si daca sunt egale afisezi


Titlul: Răspuns: Problema urgenta :D
Scris de: BloodyF din Decembrie 19, 2008, 17:30:21
Cod:
char m1[30][256]; //in acest sir de stringuri vei retine cuvintele din s1
char m2[30][256]; //in acest sir de stringuri vei retine cuvintele din s2
int n1 = 0, n2 = 0; // numaru de cuvinte din cele doua siruri

char *p = strtok(s1, s3);
while(p)
{
    strcpy(m1[++n1], p);
    p = strtok(p, s3);
}

//Analog si pentru s2
//iar de aici compari fiecare cuvant din m1 cu fiecare cuvant din m2, si daca sunt egale afisezi

nu am facut vectori bidimensionali de siruri de char asa ca nu prea pot folosi asta :(( trb ceva ce am facut ..

 [editat de moderator] cand postezi cod foloste tagul code


Titlul: Răspuns: Problema urgenta :D
Scris de: Savin Tiberiu din Decembrie 19, 2008, 18:57:48
Poti sa parcurgi primul text cu doi indici i, j, unde i reprezinta caracterul curent iar j pointeaza catre ultimul spatiu gasit, astfel ti-ai delimitat o secventa de caractere care reprezinta un cuvant. Acuma nu mai trebuie decat ptr fiecare secventa sa vezi daca apare si in al doilea sir, ceea ce poti face usor cu inca 2 foruri.


Titlul: Răspuns: Problema urgenta :D
Scris de: alexandru din Ianuarie 05, 2009, 16:54:15
Hm ok  doi vector:
Cod:
#include<iostream.h>
#include<string.h>
#include<conio.h>
#define Nmax 101
#define subp  ",.;:!?123456789 "
char v[Nmax],c[Nmax];
void main()
    {clrscr();
     cout<<"Primul sir:";  cin.get(v,Nmax);  cin.get();
     cout<<"Al doilea sir:";  cin.get(c,Nmax);
     char  *p=strtok(v,subp);
     while(p)
           {if(strstr(c,p)) cout<<p<<endl;
            p=strtok(NULL,subp);
           }
     getche();
    }

Sry  am  uitat  sa  explic ce am facut
Pai  citesc cei  2  vectori  (v si c)  apoi  parcurg  cu  ajutorul  functiei  strtok  fiecare  cuvant  din vectoru  v.
Daca  acel  cuvant  se  gaseste  in  vectorul  c, verific folosind  strstr, atunci il  afisez, daca  nu  continui  cautarea :)
Simplu si  la  obiect  :D

[editat de moderator] nu mai posta consecutiv, editeaza-ti mesajele anterioare!