[C#] Домашно Strings and Text Processing - 5 задача


17

Условие: You are given a text. Write a program that changes the text in all regions surrounded by the tags <upcase> and </upcase> to uppercase. The tags cannot be nested. Example:

We are living in a <upcase>yellow submarine</upcase>. We don't have <upcase>anything</upcase> else.

The expected result:

We are living in a YELLOW SUBMARINE. We don't have ANYTHING else.

Решениеsource.

Обяснение: Използваме "нелаком" (да не вземе първия отварящ и последния затварящ) регулярен израз за да изберем таговете, след което с ToUpper() правим тяхното съдържание с главни букви.




Отговори



0

Решение

Обяснение: Тук също реших да работа с файл, като го прочитам ред по ред. Намирам на кой индекс започва началния и затварящия таг, след това с метода Substring() вадя текста между двата тага и .
Чрез метода .ToUpper() заменяма текста между двата тага с главни букви и принтирам резултата.


от cchapo (583 точки)


0

GitHub

Използвам stringbuilder и нещо като автомат - когато види < счита че това е таг за upper и докато не види > пропуска текста . После в зависимост от състоянието на автомата (-1 за малки и 1 за големи букви) Append-ва в отговора всеки символ.


от dzhenko (3893 точки)


0

Ето и едно решение от мен с Regex


от wnvko (3123 точки)


0

http://pastebin.com/Bh28eHSv

Едно решение с рекурсия.

Проверявам също така дали всички отворени тагове се затварят и затривам затварящите тагове без отворени такива


от IankoVanov (139 точки)


0
Моежеш ли да споделиш какво точно трябва да значи "m" и каква е неговата роля. Благодаря предварително.



0
Това е "ламбда израз" (ламбда функция), а 'm' е входен за нея параметър, който може да е с произволен символ. От дясната страна на '=>' стои условието което трябва да се изпълни. Пример:
int[] numbers = { 8, 6, 4, 7, 2, 3, 5, 9 }; int result = numbers.Count(m => m > 4); Console.WriteLine(result);
numbers.Count(m => m > 4) се чете по следния начин: за всички m от numbers, където m>4, извърши операцията Count. Резултатът в този пример е броя на числата по-големи от 4.
http://www.youtube.com/watch?feature=player_detailpage&v=3sFQe8djyZY#t=4154

от Flystar (1171 точки)

0
Благодаря за изчерпателния отговор.



0

Source Решение без Regex .С IndexOf намирам началния и крайния индекс на текста в таговете, след което заменям целия подниз с таговете включително с вътрешния текст.ToUpper.

Повтарям действието докато има отварящи тагове в текста(или IndexOf == -1).


от nina75 (60 точки)