Avatar
Miroslav Jiránek:4. června 21:48

Ahoj,
snažím se udělat algortimus na počítání četnosti jetnotlivých smybolů v celé řetězci. Algortimus může být napsaný v C, ale raději bych byl kdyby mi někdo poskytnul pouze algoritmus, příp. vývojový diagram, podle kterého bych si kod napsal sám. Nepíšu sem o vyřešení problému, chtěl bych pouze poradit :)

Zkusil jsem: zkoušel jsem převést symboly do ASCII tabulky a potom je vyčíst. Nikam jsem se s tímhle postupem ale nedostal, protože každý znak má různá počet číslic a vypisovalo mi to chybné znaky

Chci docílit: snažím se přijít na algoritmus, který by vypsal počet všech použitých symbolu v řetězci.
názorná ukázka:
Hello, world.
"H"=1
"e"=1
"l"=3
"o"=2
"," = 1
" "=1
"w"=1
"r"=1
"d"=1
"."=1

 
Odpovědět 4. června 21:48
Avatar
Odpovídá na Miroslav Jiránek
Matúš Olejník:4. června 23:45

Keď sa pozrieš na ASCII tabuľku tak zistíš, že každému znaku prislúcha nejaká dekadická hodnota v rozmedzí <0 až 127> a preto túto hodnotu vieš použiť ako index do poľa s názvom napr histogram, ktoré bude mať veľkosť práve 128.

Takže ak budeš prechádzať reťazcom po jednotlivých znakoch, získaš ich ASCII hodnotu (napr. (int)'A' je 65) a túto hodnotu použiješ ako index do histogramu kde inkrementuješ počet o 1, histogram[(in­t)'A']++; .

Nakoniec ak budeš chcieť vypísať počty znakov v reťazci už len stačí prejsť celým polom a vypísať jeho hodnoty.

printf("Znak %c sa nachádza v reťazci %d krát", (char)i, histogram[i]);
Nahoru Odpovědět  +2 4. června 23:45
/* I am not sure why this works but it fixes the problem */
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.