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


10

Условие: Write a program that reverses the words in given sentence. Example:

C# is not C++, not PHP and not Delphi!
Delphi not and PHP, not C++ not is C#!

Решениеsource.

Обяснение: Първо четем думите и ги вкарваме в стек (Regex.Split()). След това четем препинателните знаци, заедно с интервалите (Regex.Match()) и махаме дума от стека. Ето и решение с масиви.

По този начин запазваме местата на препинателните знаци (дори и броя на интервалите) и се обръщат само думите.




Отговори



0

GitHub

разделям си думите в масив от стрингове и ги записвам като чета масива обратно.


от dzhenko (3893 точки)


0

Ето и моето простичко решение.

Разделям изречението по предварително зададени разделители (всички знаем кои са) и резултата естествено записвам в масив. След това разделям същото изречение по думите които съм извлякал (които са вече в масив, който подавам на String.Split()) и получвам разделителите. След това правя Array.Reverse() на масива с думите и с един цикъл ги пълня в резултата. Можеше да направя задачата със Stack и Queue, но така ми се стори по-бърза и разбираема. За разлика обаче от начина със Stack и Queue моето решени се чупи, ако накрая на изречението препинателен знак, но то пък какво изречение е без препинателен знак накрая ;)

 


от dimo.petrof (2887 точки)


0
Малко дълъг стана отговорът.
http://pastebin.com/jnfbgW1k

от hudsonvsm (25 точки)


0

Ето и моя вариант:

https://github.com/stoyans/Telerik/blob/master/CSharpPart2/StringsAndTextProcessing/13.ReverseWordsInSentence/ReverseWordsInSentence.cs

За запетайките, единственото което се сетих е да броя след коя дума(преди кое празно място ) трябва да се поставят и ги събирам в списък. При принтирането проверявам дали на съответната позиция има запетайка и я принтира.


от Tanis (75 точки)


0

Ето и едно стегнато и същевременно лесно за разбиране решение от мене:

http://pastebin.com/dDVp4u2a


от ddonchev (120 точки)


1

Здравейте!

Идеята ми за решение на задачата е свързана с регулярен израз, но в процеса на решаването се натъкнах на едно противоречие.

            string sentence = "Cq is not Cq and PHP is not Delphi";
            string pattern = @"\b.*?\b";

            Match match = Regex.Match(sentence, pattern);

            while (match.Success)
            {
                match = match.NextMatch();
            }

Свойството "Success" винаги връща стойност "true", докато обекта "match" при всяка следваща итерация остава празен. Същото се получава и със шаблона

 string pattern = @"\b\w*?\b"; ,

което още повече ме озадачава. Има ли някой идея защо се получава така? Да поясня само и, че умишлено съм заместил (C#) и (C++)>(Cq), защото \b e границата м/у "\w"  и "\W".

Благодаря предварително!


от Aleksandar.Kochev (0 точки)