Brojanje upisanih slova

1

Brojanje upisanih slova

offline
  • Pridružio: 23 Jun 2016
  • Poruke: 5

Pozdrav svima,

treba mi malo pomoči za zadatak koji radim u C++, pa ako neko zna i voljan je da mi pomogne bilo bi zaista lepo, tek sam pocetnik.

Program u koji se unosi string, (ajde max 300 slova), onda napravimo statistiku svakog upisanog slova, koliko puta se pojavi, znači:
slovo a se pojavi ? puta,
slovo b se pojavi ? puta....

Da ostvariti matricu pa da stavljam slove? Možda koja varijanta sa ASCII?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Čekaj, jel' treba rešenje da bude prikazano u matrici ili je potrebna samo statistika? Ako ne treba, možeš jednostavno for petljom da rešiš. Kreiraš promenljivu za po jedno slovo i povećavaš ih u slučaju da prolaskom kroz string naiđeš na neko. String posmatraš kao niz karaktera (što i jeste).



offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • Gde živiš: Niš

E.L.I.T.E. ::Kreiraš promenljivu za po jedno slovo...Ili još bolje da kreira niz koji indeksira samim karakterom...

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Misliš da kreira niz koji indeksira samim karakterom i onda u njega ubacuje elemente? Može i tako.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • Gde živiš: Niš

Nema šta da ubacuje, samo inkremetira element niza čiji je indeks sam karakter.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Može i još lakše preko find() funkcije.

Najlakše bi mu bilo:

#include <algorithm> std::string str = "blablablablablablablabalaba"; size_t a = std::count(str.begin(), str.end(), 'a');

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • Gde živiš: Niš

Pa može, ali bi sa takvim pristupom obilazio string za svaki karakter čiji mu broj pojavljivanja treba, a sve je to moguće obaviti u jednom jedinom prolazu. Nešto ovako:
int* array = new int[256]; for(int i = 0; i < 256; i++)        array[i] = 0; for(int i = 0; i < str.length; i++)        array[str[i]]++;

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1872

vasa.93 ::int* array = new int[256]; for(int i = 0; i < 256; i++)        array[i] = 0; for(int i = 0; i < str.length; i++)        array[str[i]]++;
Može i kraće:
int niz[256]={}; for(int i = 0; str[i]; i++)        niz[str[i]]++;
(podrazumijeva se da se string završava terminatorom stringa \0)

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ako koristimo neke novije tehnologije (recimo IxCpp), možemo napisatio i ovako:
#include <iostream> #include <string> #include "cpplinq\linq.hpp" using namespace cpplinq; struct charCount {    char c;    int count;    charCount(const char c, const int count) : c(c), count(count)    {    } }; int main() {    std::string data = "fdashjkfldhfdadhsjfdjsalkfddhshfkr";    auto counts = from(data)       .groupby([](const auto c) { return c; })       .select([](const auto g) { return charCount(g.key, from(g.start, g.fin).count()); });    for each (auto count in counts)       std::cout << count.c << ": " << count.count << std::endl;    return 0; }

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • Gde živiš: Niš

Sale.S ::Može i kraće...Može, naravno. I od ovog tvog može kraće. Very Happy
int niz[256] = {}; for (int i = 0; str[i]; niz[str[i++]]++);
No, sa takvim modifikacijama opada čitljivost koda. Wink

Ko je trenutno na forumu
 

Ukupno su 700 korisnika na forumu :: 18 registrovanih, 2 sakrivenih i 680 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Aleksandar Tomić, aramis s, deimos25, DragoslavS, esx66, indja, janbo, kolle.the.kid, Koridor, Krusarac, ladro, Lazarus, loon123, maCvele, SR-3m, vandrej, VP6919