Poslao: 24 Jun 2016 16:31
|
offline
- MacLeod
- Novi MyCity građanin
- 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.
|
|
Poslao: 24 Jun 2016 17:11
|
offline
- E.L.I.T.E.
- Legendarni građanin
- 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).
|
|
|
|
Poslao: 24 Jun 2016 17:24
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
E.L.I.T.E. ::Kreiraš promenljivu za po jedno slovo...Ili još bolje da kreira niz koji indeksira samim karakterom...
|
|
|
|
Poslao: 24 Jun 2016 17:42
|
offline
- E.L.I.T.E.
- Legendarni građanin
- 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.
|
|
|
|
Poslao: 24 Jun 2016 23:29
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Nema šta da ubacuje, samo inkremetira element niza čiji je indeks sam karakter.
|
|
|
|
Poslao: 24 Jun 2016 23:46
|
offline
- E.L.I.T.E.
- Legendarni građanin
- 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');
|
|
|
|
Poslao: 25 Jun 2016 05:49
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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]]++;
|
|
|
|
Poslao: 26 Jun 2016 15:15
|
offline
- Sale.S
- Elitni građanin
- 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)
|
|
|
|
Poslao: 26 Jun 2016 15:19
|
offline
- Srki_82
- Moderator foruma
- 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;
}
|
|
|
|
|