25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

504 Въведение в програмирането със C#<br />

се получава нещо като краен автомат (state machine), който<br />

разпознава e-mail адреси. Всички намерени e-mail адреси трябва да се<br />

проверят дали имат непразен получател, непразен хост, домейн с<br />

дължина между 2 и 4 букви, както и да не започват или завършват с<br />

точка.<br />

Друг по-лесен подход за тази задача е да се раздели текста по всички<br />

символи, които не са букви и точки и да се проверят така извлечените<br />

"думи" дали са валидни e-mail адреси чрез опит да се раздробят на<br />

непразни части: , , , отговарящи на изброените<br />

вече условия.<br />

20. Използвайте RegEx.Match(…) с подходящ регулярен израз. Алтернативният<br />

вариант е да си реализирате автомат, който има състояния<br />

OutOfDate, ProcessingDay, ProcessingMonth, ProcessingYear и обработвайки<br />

текста побуквено да преминавате между състоянията според<br />

поредната буква, която обработвате. Както и при предходната задача,<br />

можете предварително да извадите всички "думи" от текста и след това<br />

да проверите кои от тях съответстват на шаблона за дата.<br />

21. Раздробете текста на думи и проверете всяка от тях дали е палиндром.<br />

22. Използвайте масив от символи char[65536], в който ще отбелязвате<br />

колко пъти се среща всяка буква. Първоначално всички елементи на<br />

масива са нули. След побуквена обработка на входния низ можете да<br />

отбележите в масива коя буква колко пъти се среща. Например ако се<br />

срещне буквата 'A', ще се увеличи с единици броят срещания в масива<br />

на индекс 65 (Unicode кодът на 'A'). Накрая с едно сканиране на масива<br />

може да се отпечатат всички ненулеви елементи (като се преобразуват<br />

char, за да се получи съответната буква) и и прилежащия им брой<br />

срещания.<br />

23. Използвайте хеш-таблица (Dictionary), в която пазите за<br />

всяка дума от входния низ колко пъти се среща. Прочетете в Интернет<br />

за класа System.Collections.Generic.Dictionary. С едно<br />

обхождане на думите можете да натрупате в хеш-таблицата<br />

информация за срещанията на всяка дума, а с обхождане на хештаблицата<br />

можете да отпечатате резултата.<br />

24. Можете да сканирате текста отляво надясно и когато текущата буква<br />

съвпада с предходната, да я пропускате, а в противен случай да я<br />

долепяте в StringBuilder.<br />

25. Използвайте статичния метод Array.Sort(…).<br />

26. Сканирайте текста побуквено и във всеки един момент пазете в една<br />

променлива дали към момента има отворен таг, който не е бил затворен<br />

или не. Ако срещнете "", излизайте от режим "отворен таг". Ако срещнете буква,<br />

я добавяйте към резултата, само ако програмата не е в режим "отворен<br />

таг". След затваряне на таг може да добавяте по един интервал, за да<br />

не се слепва текст преди и след тага.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!