Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema urgenta :D  (Citit de 4815 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Bloodyf
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« : 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 Sad 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 ...
« Ultima modificare: Decembrie 19, 2008, 18:53:04 de către Savin Tiberiu » Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #1 : 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 Very Happy
Memorat
Bloodyf
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #2 : 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
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #3 : 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
Memorat
Bloodyf
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #4 : 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 ...
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #5 : 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
Memorat
Bloodyf
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #6 : 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 Sad( trb ceva ce am facut ..

[editat de moderator] cand postezi cod foloste tagul code
« Ultima modificare: Decembrie 19, 2008, 18:54:17 de către Savin Tiberiu » Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #7 : 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.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #8 : 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 Smile
Simplu si  la  obiect  Very Happy

[editat de moderator] nu mai posta consecutiv, editeaza-ti mesajele anterioare!
« Ultima modificare: Ianuarie 05, 2009, 20:08:06 de către alexandru » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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