» »

statistika črk v stringu C++

statistika črk v stringu C++

rushhh ::

Mene pa zanima, če bi mi znau kdo pomagat s tto kodo..jemlemo znake iz druge datoteke, en znak posebej.

while(!datoteka.eof())
{

znak = datoteka.get();


if(isalpha(znak))
-->tule bi pa pole kao za vsako črko prevero, katera je in jo potem primerni tudi prištel.

Zei pa, če ma kdo kako idejo kako bi lahk to naibol u izi naredo, bi bil zlo vesel:D

Lp

netanyahu ::

/* inicializacija cele tabele štvcev na 0 */
int count[256] = {0}

/* ... znotraj zanke: */
count[znak]++;

Tutankhamun ::

typedef std::map <char, int> myMap;
myMap stat;

while(!datoteka.eof())
	stat [datoteka.get()]++;


myMap::iterator iEnd = stat.end ();
for (myMap::iterator iCur = stat.begin (); iCur != iEnd; iCur++)
	std::cout << (*iCur).first << ": " << (*iCur).second << std::endl;



Lažja naloga sploh nebi mogla bit. Pa ni se ti treba matrat kje je kšna črka, pa take fore.

Prvi loop bere črko po črko, to kar si že ti meu. Pol pa shranjuje v std::map. Če črka že obstaja jo bo poveču za 1, drgač jo bo pa sam shranu.
Druga for zanka pa prebere SAMO črke ki so bile shranjene in njihovo število.
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

rushhh ::

Okei..tutankhamun..tk dauč še nismo prišli tk da ne vm nč o ttem myMap.. kjero knjižico morem sploh vključit..pa če mam using namespace std; kk potem zgleda koda??

Hvala

ERGY ::

Tutankhamun ::

Aja na začetku dodaj include
se pravi #include "map"

če maš using namespace std;
lahk pustiš kodo tako kot je al pa zradiraš povsod std::

Vrjetn se tko al tko naute učil nč od std::map.
Drgač ti je pa ERGY napisu stran kjer si lahk prebereš o tem map kontejnarju al kak se u slovenščini reče. Pa še vector si lahk pogledaš ....

Pa ne gledat sam to kar ste se učil, bodi bol napreden :)
AMD Phenom QUAD 9950 Black Edition, 8GB

rushhh ::

Kako bi naredu funkcijo za iskanje elementa v seznamu, ki bi v primeru, da je bila črka najdena prišteje stevilo +1 na podlagi te kode...

struct Crka
{
char crka;
int stevilo;
Crka* naslednji;

};

Crka* zacetek=NULL;

void dodaj(char znak) //znak prejme iz že prej omenjene funkcije..
{
Crka* trenutni;
trenutni = new Crka;

trenutni->crka=znak;
trenutni->stevilo=1;
trenutni->naslednji=zacetek;
zacetek=trenutni;

}

Sem probal z bool, običn void, pa mi program vedno zašteka... help plz!

Tutankhamun ::

No lej, tuki sm neki naredu. NI STESTIRANO, NITI NI DO KONCA NAREJENO. Tko da moreš ti dodat funkcijo za branje znakov ... Povsod kjer je //TODO moreš še dodat svojo kodo. Pol pa testiraj če sploh dela tale zadeva.

#include "iostream"

using namespace std;

struct Crka 
{
	char crka; 
	int stevilo;
	Crka* naslednji;
};

int main(int argc, char* argv[])
{
	/*
		INICIALIZACIJA
	*/
	Crka *myCrka = new Crka;
	myCrka->naslednji = NULL;

	char ch;
	// TODO: preberi znak, ch =
	myCrka->crka = ch;
	myCrka->stevilo = 1;
	
	bool najdenaCrka;
	while (/*TODO: pogoj koliko časa naj se zanka izvaja*/)
	{
		// TODO: preberi znak, ch =

		/*
		*	FUNKCIJA ZA ISKANJE ZNAKA IN ČE GA NAJDE GA POVEČA ZA 1
		*/
		Crka *findCrka = myCrka;
		najdenaCrka = false;
		do
		{
			if (findCrka->crka == ch)
			{
				findCrka->stevilo++; // najdena črka, povečaj za ena
				najdenaCrka = true;  //

				break; // prekini z iskanjem
			}
		} while (findCrka = findCrka->naslednji); // išči dalje, do konca seznama

		/*
		*	FUNKCIJA ZA DODAJANJE NOVE ČRKE V SEZNAM
		*/
		if (!najdenaCrka) // nismo našli črke, treba jo je dodati na seznam
		{
			findCrka->naslednji = new Crka; // kreiramo novo črko in jo shranimo v seznam
			findCrka->naslednji = NULL;
			findCrka->crka = ch;
			findCrka->stevilo = 1;
		}
	}

	/*
	*	FUNKCIJA ZA IZPIS ČRK IN NJIHOVIH POJAVITEV
	*/
	Crka *printCrka = myCrka;
	do
	{
		cout << printCrka->crka << ": " << printCrka->stevilo << endl;
	} while (printCrka->naslednji);

	/*
	*	KO KONČAMO BO TKO SISTEM SPUCAL ZA NAMI, TAKO DA SE NAM NI POTREBNO MATRAT BRISAT SEZNAMA
	*	AMPAK, KER SI LIH TI SE BOM POMATRU
	*/
	while (myCrka)
	{
		Crka *deleteCrka = myCrka;
		myCrka = myCrka->naslednji;
		delete deleteCrka, deleteCrka = NULL;
	}
	delete myCrka, myCrka = NULL;

	return 0;
}
AMD Phenom QUAD 9950 Black Edition, 8GB

sbandur84 ::

Nebi bilo bolj pregledno, ce bi si naredil class ali struct seznam crk in mu dodal funkcije za iskanje, dodajanje in brisanje?

Tutankhamun ::

Vrjetn mu je prfoks reku s čim naj se zajebava. Če bo pa hotu razred bo pa povedu. Zaenkrat bo dobr.
AMD Phenom QUAD 9950 Black Edition, 8GB

rushhh ::

Pač v bistvu naš prfoks hoče da delamo funkcije izven maina..za boljšo preglednost..z razredi pa še nismo delali, zato pa pole težijo, da ne delamo sami..mislm vsei tisti, ki tega ne res ne znamo sami...zanima me kok bi napiso kodo, če se ti lubi, da bi ble te funkcije izven maina tko ko sem jst delo funkcije(zarad prfoksov bol ko ne)..pač una ka sem jo sam napisal da doda znak, dela...druga potem ko sem dau pa bool funkcijo, ki vrne v primeru, da črka ni bila najdena false in potem to črko doda v funkciji dodaj, drugače znotraj bool funkcije prišteje števec..to bool funkcijo pa kličem iz void dodaj(char znak);
pa mi program ne dela..compajla se..samo potem ko preberem datoteko, deluje kot bi bilo v datoteki ful znakov in preprosto miruje in se ne izvede nič...ne vm sam bi res rabo vedet, ka morem pazit na kazalcih pri tei bool funkciji..!!? A sem sploh pravilno definiro kazalec Crka* zacetek=NULL takoj za strukturo..??

Zgodovina sprememb…

  • spremenil: rushhh ()

Tutankhamun ::

A si sploh pogledu, kako sm napisu programček? Ker mam tak filing da si vidu da ni funkcij tko da to ni to in se sploh nis hotu ukvarjat kaj pa kako nj bi programček delu.

Tist kar si ti napisu funkcijo dodaj. Tm ti predpostavljaš, da je spremenljivka zacetek globalna spremenljivka, da je definirana izven main funkcije. Dobr da ni kšn veliki kit to gledu, ker bi ti vrjetn reku da te bo okol ušes :P.

Tisto spremenljivko definirj v main funkciji!

Potem pa usako funkcijo, ki dela s seznamom, nj ima najmanj en argument Crka *neki.

int dodaj (Crka *prviElement, char znak);
Crka *najdiZnak (Crka *prviElement, char znak); // ta funkcija vrne, v primeru najdenega znaka element Crka*. V primeru da ne najde pa NULL.
int brisi (Crka *prviElement);

Pol pa tko približn napišeš program
Crka *najden;
...
crka ch = // preberi znak
if (najden = najdiZnak (zacetek, ch))
{
   // najdu
   najden->stevilo++;
}
else
{
   // ni najdu
   dodaj (zacetek, ch);
}


Tiste funkcije pa prepišeš iz moje kode. Evo eno ti napišem za najdi funkcijo!
void najdi (Crka *prviElement, char ch)
{
    bool najdenaCrka = false;
    do
    {
	if (findCrka->crka == ch)
	{
		najdenaCrka = true;  //
		break; // prekini z iskanjem
	}
    } while (findCrka = findCrka->naslednji); // išči dalje, do konca seznama

   if (najdenaCrka)
       return findCrka;
  
   return NULL;
}
AMD Phenom QUAD 9950 Black Edition, 8GB


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# povezava forma in classa

Oddelek: Programiranje
172184 (1647) Miko55
»

Nemorem rešit ene naloge z c++ (sem začetnik) (strani: 1 2 )

Oddelek: Programiranje
6810088 (5826) technolog
»

Pomoč pri programčkih

Oddelek: Programiranje
152764 (2414) Mitja Bonča
»

[Naloga][Python] Vislice

Oddelek: Programiranje
112815 (2465) vice boy
»

[NALOGA][C] fri-vsp - strukture (struct)

Oddelek: Programiranje
101476 (1317) Vesoljc

Več podobnih tem