Programare.org - Programare Romaneasca: C/C++, PHP, Java, .NET, VB, Delphi, etc.
HELP PLEASE ! Prelucrarea sirurilor caracteriale in C++;

 
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului Programare.org -> C / C++ / Visual C++
Subiectul anterior :: Subiectul următor  
Autor Mesaj
NoVaK
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 5

MesajTrimis: Lun Dec 21, 2009 10:47 pm    Titlul subiectului: HELP PLEASE ! Prelucrarea sirurilor caracteriale in C++; Răspunde cu citat (quote)

Salutare oameni buni.
Sunt student al cursului I de facultate. Studiez C++ de la inceputul semestrului si am facut progres considerabil in conceperea acestui limbaj. Fiinde printre cei mai "dezghetati" din grupa un elev m-a rugat sa-l ajut cu o problema. La prima vedere mi-a parut usoara insa cind m-am apucat s-o fac am intilnit greutati pe care nu le-am putut depasi. Mai pe scurt conditia problemei suna in felul urmator :

Pentru o propozitie data sa se calculeze fregventa repetarii fiecarui cuvint din aceasta propozitie.

Rog toti binevoitorii de pe acest forum sa contribue la elaborarea acestui program, chiar am nevoie urgent de el Crying or Very sad .

Multumesc anticipat.

P.S. Folosesc DevC++ 4.9.9.2
Sus
Vezi profilul utilizatorului Trimite mesaj privat
jos8cal
Avansat


Data înscrierii: 14/Feb/2007
Mesaje: 329

MesajTrimis: Lun Dec 21, 2009 11:13 pm    Titlul subiectului: Răspunde cu citat (quote)

Spargi propozitia in cuvinte, le bagi intr-un map (cuvint, frecventa) si la sfirsit parcurgi map-ul si afisezi frecventa.

pentru fiecare cuvint din propozitie
map[cuvint].frecventa++

pentru fiecare cuvint din map
afisezi map[cuvint].frecventa


Ultima modificare efectuată jos8cal la Lun Dec 21, 2009 11:25 pm, modificat de 2 ori în total
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
NoVaK
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 5

MesajTrimis: Lun Dec 21, 2009 11:23 pm    Titlul subiectului: Răspunde cu citat (quote)

jos8cal a scris:
Spargi propozitia in cuvinte, le bagi intr-un map (cuvint, frecventa) si la sfirsit parcurgi map-ul si afisezi frecventa.

pentru fiecare cuvint din propozitie
map[cuvint].frecventa++

pentru fiecare cuvint din map
afisezi map[cuvint].frecventa


Confused
Sorry, dar cred ca o secventa de cod mi-ar explica mai bine ce si cum sa fac.
Sus
Vezi profilul utilizatorului Trimite mesaj privat
jos8cal
Avansat


Data înscrierii: 14/Feb/2007
Mesaje: 329

MesajTrimis: Lun Dec 21, 2009 11:25 pm    Titlul subiectului: Răspunde cu citat (quote)

LE mutat aici:
Idea cu map-ul este sa nu compari fiecare cuvint cu fiecare cuvint, ca vei avea o complexitate n^2. Asa ca folosesti un binary tree, map-ul din povestea de mai sus, sa reduci numarul de verificari. Cum probabil inca n-ati ajuns la map-uri in semestrul 1, vezi aici ce-i ala si daca razbesti o pagina, gasesti si codul pentru problema ta.
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
Adin
Coder


Data înscrierii: 08/Iul/2007
Mesaje: 189

MesajTrimis: Lun Dec 21, 2009 11:42 pm    Titlul subiectului: Răspunde cu citat (quote)

NoVaK a scris:
Sorry, dar cred ca o secventa de cod mi-ar explica mai bine ce si cum sa fac.

Nu crezi ca ar fi mai bine daca ai posta TU o secventa de cod, evident incompleta, dar din care sa se vada ca ai incercat ceva? Apoi ai putea pune intrebari la obiect, de genul: am propozitia in stringul s, cum fac sa o impart in cuvinte?
Sus
Vezi profilul utilizatorului Trimite mesaj privat
NoVaK
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 5

MesajTrimis: Lun Dec 21, 2009 11:46 pm    Titlul subiectului: Răspunde cu citat (quote)

jos8cal a scris:
LE mutat aici:
Idea cu map-ul este sa nu compari fiecare cuvint cu fiecare cuvint, ca vei avea o complexitate n^2. Asa ca folosesti un binary tree, map-ul din povestea de mai sus, sa reduci numarul de verificari. Cum probabil inca n-ati ajuns la map-uri in semestrul 1, vezi aici ce-i ala si daca razbesti o pagina, gasesti si codul pentru problema ta.


Shocked Confused
Prea sofisticat pentru nivelul meu.
Ca sa aveti ideie cit de n00b sunt, iata la ce m-am inglodat :

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

int main(){
char prop[100],tab[100];
char **p;
int i,n=0;

puts("Introduceti propozitia: ");
gets(prop);
//-----------
p[n]=strtok(prop," .");

while (p[n]!=NULL)
{
n++;
p[n]=strtok(NULL," .");
}
//-----------
for (i=0;i<n;i++) printf("%s",&*p[i]);
getch();
}

Functioneaza insa putin folos din ea pina ce. Sad
Sus
Vezi profilul utilizatorului Trimite mesaj privat
jos8cal
Avansat


Data înscrierii: 14/Feb/2007
Mesaje: 329

MesajTrimis: Mar Dec 22, 2009 12:30 am    Titlul subiectului: Răspunde cu citat (quote)

Functioneaza pe hirtie poate, ca altfel el crapa saracu de vai mama lui.

Inainte sa pui in tabloul p[n] vreo valoare, trebuie sa faci loc, adica sa-i aloci spatiu. Poti face dinamic cu malloc() sau sa aloci dupa ureche un tablou cu un numar din burta, cum ai facut la prop si tab, anume asa: char* p[100]; (adica presupui ca ai 100 de cuvinte).

Ce trebuie sa faci mai departe este sa mai faci o lista in care pui cuvinte unice cu frecventa lor. Parcurgi lista initiala si compari fiecare element cu lista asta noua. Daca ai pus deja cuvintul in lista noua, atunci incrementezi frecventa, daca nu, il pui ca nou cu frecventa 1. La sfirsit lista asta noua va contine cuvinte unice cu frecventa lor.
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
NoVaK
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 5

MesajTrimis: Mar Dec 22, 2009 1:30 am    Titlul subiectului: Răspunde cu citat (quote)

jos8cal,

Very Happy dupa ce am luptat vreo ora cu incapatinarea mea, totusi am inceput sa analizez informatia de pe lincul prestat si ca sa vezi super utila mi-a fost lectura.
Deci totul functioneaza perfect. Very Happy Rolling Eyes

#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string>
#include<map>

using namespace std;

int main(){
map <string, int> nrcuv;
char prop[100],proprez[100],ex[100];
char *p;

puts("Introduceti propozitia: ");
gets(prop);
strcpy(proprez,prop);
//-----------
p=strtok(prop," .");
while (p!=NULL)
{
nrcuv[p]++;
p=strtok(NULL," .");
}
//-----------
cout <<"----------\nCuvintele si frecventa repetarii lor sunt urmatoarele:\n";
p=strtok(proprez," .");
while (p!=NULL)
{
if (strstr(ex,p)==NULL){
cout << p <<"-"<< nrcuv[p]<<"\n";
strcat(ex,p);
}
p=strtok(NULL," .");
}
//-----------
getch();
}

Mi-a mai ramas o singura intrbare. Nu as dori sa mai parcurg odata in plus propozitia(proprez-propozitia de rezerva) excluzind cuvintele a caror frecventa deja afost afisata, doar pentru a afisa continutul mapei. De aici deduc intrebarea propriu-zisa:
cum sa parcurg mapa creata afisind fiecare cuvint si frecventa lui ?


Ultima modificare efectuată de către NoVaK la Mar Dec 22, 2009 1:53 am, modificat de 1 dată în total
Sus
Vezi profilul utilizatorului Trimite mesaj privat
jos8cal
Avansat


Data înscrierii: 14/Feb/2007
Mesaje: 329

MesajTrimis: Mar Dec 22, 2009 1:48 am    Titlul subiectului: Răspunde cu citat (quote)

Cod:
   map <string, int>::iterator it;
   for (it = nrcuv.begin(); it != nrcuv.end(); it++)
      cout << it->first << ": " << it->second << '\n';
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
NoVaK
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 5

MesajTrimis: Mar Dec 22, 2009 1:58 am    Titlul subiectului: Răspunde cu citat (quote)

jos8cal a scris:
Cod:
   map <string, int>::iterator it;
   for (it = nrcuv.begin(); it != nrcuv.end(); it++)
      cout << it->first << ": " << it->second << '\n';

Very Happy Mersi muuuuuuuuuuuuuult. Sunt in culmea fericirii Very Happy
Daca colegul pune bere, ma impart cu tine Laughing
Sus
Vezi profilul utilizatorului Trimite mesaj privat
alex_pascanu
Coder


Data înscrierii: 12/Aug/2007
Mesaje: 202

MesajTrimis: Mar Dec 22, 2009 9:16 am    Titlul subiectului: Răspunde cu citat (quote)

daca requirementul e fara STL sau alt class library ce faci?
Sus
Vezi profilul utilizatorului Trimite mesaj privat Blog
Drakoo
Junior


Data înscrierii: 21/Sep/2008
Mesaje: 39

MesajTrimis: Mar Dec 22, 2009 4:21 pm    Titlul subiectului: Răspunde cu citat (quote)

s-ar putea incerca o varianta mai putin eficienta.. dar mult mai usoara de inteles..

parcurgi odata propozitia... si pui fiecare cuvant intr-un sir .. ordonezi sirul si apoi verifici de cate ori se repeta un cuvand in acea secventa .. stiind ca el sunt alaturate.. deci nu ai sa mai regasesti acelasi cuvant in alta parte a secventei..
Sus
Vezi profilul utilizatorului Trimite mesaj privat
jos8cal
Avansat


Data înscrierii: 14/Feb/2007
Mesaje: 329

MesajTrimis: Mar Dec 22, 2009 4:25 pm    Titlul subiectului: Răspunde cu citat (quote)

Pai asta face map-ul pe dedesupt, doar ca te scuteste sa mai parcurgi sirul ordonat dupa ce l-ai ordonat. Cu map-ul calculezi frecventa in timp ce ordonezi, aka bagi in map.
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
Afișează mesajele pentru a le previzualiza:   
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului Programare.org -> C / C++ / Visual C++ Ora este GMT + 2 ore 
 
Pagina 1 din 1

 
Mergi direct la:  
Nu puteți crea un subiect nou în acest forum
Nu puteți răspunde în subiectele acestui forum
Nu puteți modifica mesajele proprii din acest forum
Nu puteți șterge mesajele proprii din acest forum
Nu puteți vota în chestionarele din acest forum
Pagini.info = Legaturi cu lumea - director web romanesc cu situri, webloguri & forumuri