práce s řetězci C

HackForum

práce s řetězci C#
Ahoj,
Chtěl bych se zeptat jestli by mi někdo pomohl jak vyřešit jeden problém a to :
Mám nějaký libovolné dlouhý řetězec a potřeboval bych zjistit kolik písmen se vnem nachází a jakých respektive když budu mýt řetězec : hello world tak aby to vypsalo že h =1 l= 2 a podobně všechno nemusíte mi tu psát kódy ale stačí mi i slovně jak nějak tenhle problém vyřešit :-) za případně odpovědi děkuji

(odpovědět)
jstc | 89.24.49.*30.9.2012 19:29
re: práce s řetězci C#
asociativni pole nebo normalni pole a inkrementace..
takze treba prectes znak zjistis si jeho ascii hodnotu a tu pouzijes jako klic pro pole a inkrementujes hodnotu v nem ukrytou o 1..
(odpovědět)
niels | 193.200.150.*30.9.2012 21:34
re: práce s řetězci C#
Tak v cecku nic jako asociativni pole snad neni ne? nebo jestli se pletu tak se omlouvam :]
Takze mi furt zbyva to normalni pole ale presne nechapu jak mam tohle resit s normalnim polem respektive jak to najdu vtom poli tu spravnou hodnotu
(odpovědět)
jstc | 147.229.186.*30.9.2012 22:17
re: práce s řetězci C#
Wiki: [link]
(odpovědět)
American z Vysocan | 77.48.106.*1.10.2012 1:52
re: práce s řetězci C#
V céčku nedělám, ale zhruba takto: [link]

V C++ je to ještě jednoduší, tam je STL <algoritm> metoda count ([link])

...

(odpovědět)
b | E-mail1.10.2012 2:52
re: práce s řetězci C#
K podobnemu vysledku jsem dosel i ja jenze kdyz sem stim chtel pak i dal pracovat jakoze vypsat treba jen 3 znaky ktere se tam vyskytuji nejvickrat tak jsem se na tom nejak zasekl.
(odpovědět)
jstc | 147.229.176.*1.10.2012 8:56
re: práce s řetězci C#
Nebo spis napadlo me jen reseni 2 poli kde obe budou zacinat od nuly a v jednom budu zaznamenavat cotoje za znak pole_znak[0] = 'a' a pak v druhem poli pole_hodnota[0] = '3' kolikrat se tam ten znak vyskytuje a pak jen vypisu urcitej pocet tech prvku v poli dal pak bude treba b s hodnotou 2 protoze to bude klesat , ale urcite musi existovat nejake elegantnejsi reseni nez tohle :P

(odpovědět)
jstc | 147.229.176.*1.10.2012 9:08
re: práce s řetězci C#
mala pismena jsou v ascii tabulce od 97 do 122.
na zacatku si inicializijes pole hodnotou 0.
pole[97] = 0;
pole[98] = 0;
....
pole[122] = 0;

ted nactes pismeno rekneme 'k'.
otestujes si jestli spada do rozsahu 97 az 122 a pokud ano inkrementujes
pole[nacteny_znak]++;

pro zjisteni nejfrekventovanejsich znaku si muzes napsat treba funkci ktera zmeni znamenko z + na -. takze projdes jednou zjistis nejcetnejsi znak a vynasobis -1. projed podruhe zjistis druhe nejfrekventovanejsi slovo a vynasobis -1 atd. dalsi moznosti jsou tridici algoritmy. na tohle male mnozstvi ti bohate staci bubble sort.
(odpovědět)
niels | 193.200.150.*1.10.2012 14:30
re: práce s řetězci C#
zapomel jsem dodat ze rozsah 97 az 122 neni konecny a muzes si ho libovolne upravit k obrazu svemu. takze klidne od 1 do 255 pokud je libo (nulu nema smysl testovat protoze ta je v beznem stringu pouze na konci jako ukoncovaci znak).
(odpovědět)
niels | 193.200.150.*1.10.2012 14:31
re: práce s řetězci C#
tak nejak jsem to taky zkousel ale nedotahl kvuli nevedomosti a neznalosti ale tak zkusim to jeste jednou timhle zpusobem vsem zucastnenym diky za prispevky :] ale kdyby ktomu jeste nekdo neco mel necht klidne napise
(odpovědět)
jstc | 147.229.186.*1.10.2012 14:37
re: práce s řetězci C#
Pro inspiraci přikládám rovnou kód :)

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

int main(int argc, char *argv[]){
int pole_znaku[256];
int i;

for(i = 0; i < 256; i++)
pole_znaku = 0;

for(i = 0; i < strlen(argv[1]); i++)
pole_znaku[argv[1]]++;

for(i = 1; i < 256; i++)
if(pole_znaku != 0)
printf("%c - %i\n", i, pole_znaku);

return 0;
}


----------
Sec-Cave.cz - [link]
HellSec.cz - [link]
(odpovědět)
RubberDuck | E-mail | Website1.10.2012 14:52
re: práce s řetězci C#
Jen teda mam ted tenhle stav: [link]

Ale kdyz to projizdim tim buble sortem tak se vlastne posune to misto takze sice vim ze nejaky znak je tam 5x ale kdyz uz je na nejvyssi pozici pole tak uz nevim jakej to byl znak :/
(odpovědět)
jstc | 147.229.186.*1.10.2012 16:03
re: práce s řetězci C#
Co zkusit místo pole jednosměrný nebo obousměrný seznam?

----------
Sec-Cave.cz - [link]
HellSec.cz - [link]
(odpovědět)
RubberDuck | E-mail | Website1.10.2012 16:31
re: práce s řetězci C#
Jakoze misto toho pole kde ukladam pole_znaku[107] = 2 , kde 107 je "k" ? nebo to si nechat a pak prevest nejak? nicmene mrknu na ty seznamy diky :]
(odpovědět)
jstc | 147.229.186.*1.10.2012 16:35
re: práce s řetězci C#
A jeste bych to asi radsi nejak udelal bez dynamicke alokace tak to musim vyresit asi nejak bez toho :P
(odpovědět)
jstc | 147.229.186.*1.10.2012 16:50
re: práce s řetězci C#
V tom případě bych ti doporučil to, co psal niels. Pokud ta data chceš zachovat, zduplikuj celé pole a při každém pokusu o nalezení nejvyššího výskytu ho vždy vyhoď nebo vynuluj.
Jinak dynamická alokace není tak těžká, jak by se ti mohlo zdát. Prakticky jen říkáš systému, kolik místa potřebuješ rezervovat a ukládáš si adresu, kde to rezervované místo začíná. Pak už se chová prakticky totožně jako kterýkoliv jiná proměnná nebo struktura ;)

----------
Sec-Cave.cz - [link]
HellSec.cz - [link]
(odpovědět)
RubberDuck | E-mail | Website1.10.2012 17:04
re: práce s řetězci C#
Prave o to se pokousim ale nedokazu si to asi nejak predstavit :/ respektive najdu nejvyssi prvek na cislu 107 coz vim je ze k a vim ze tam je 5x ale kam ho pak ulozit abych ho pozdeji mohl vypsat?

Me napadlo jen reseni 2 poli kde vzdycky by se zapsalo od zacatku do prvniho hodnota toho zakladniho pole a to pole_1[0] = 107 a pak by bylo pole_2[0] = 5 ze vlastne pismeno k je tam 5x a nejvickrat takze by bylo v obou polich na prvnim miste ale prijde mi to jako strasne neefektivni a debilni :D tak nevim jestli jsi to myslel takhle jinak moc dekuju ze reagujes a snad vam tu nejak neprasim forum nebo tak neco :P
(odpovědět)
jstc | 147.229.186.*1.10.2012 17:30
re: práce s řetězci C#
Tak jsem to nakonec vyresil zde je vysledek kdyby to jen nahodou nekoho zajimalo diky vsem diskutujicim za pomoc ;]

[link]
(odpovědět)
jstc | 147.229.186.*1.10.2012 20:58
re: práce s řetězci C#
Paráda. Teď si nech spočítat "&#26368;&#24460;&#12398;&#
27005;", nebo "&#1096;&#1077;&#1089;&#109
0;&#1086;&#1081;".
(odpovědět)
Bystroushaak_ | 109.202.67.*1.10.2012 21:24
re: práce s řetězci C#
Lol, soom trochu nezvládá utf. Myslel jsem [link]
(odpovědět)
Bystroushaak_ | 109.202.67.*1.10.2012 21:28
re: práce s řetězci C#
mel jsem tam jen ascii nezachazel jsem do utf
(odpovědět)
jstc | 147.229.186.*1.10.2012 22:31

Zpět
 
 
 

 
BBCode