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


5

Условие: Write a program that reads a string, reverses it and prints the result at the console.

Решениеsource.

Обяснение: Преобразуваме стринга в масив от чарове за да можем да използваме Array.Reverse(). След това го отпечатваме на конзолата.




Отговори



22

Здравейте, искам да обърна Внимание на тази задача, която изглежда много проста,но има нещо много интересно, което искам да обясня.

Първо: Да си припомним какво е overload-нат метод - това е мотед с едно име, но с различни параметри, които му се подават. В случая с Console.WriteLine() имаме 19 overload-нати метода.

РЕШЕНИЕ: => http://pastebin.com/U6isvy7J

ОБЯСНЕНИЕ:

1. Първо въвеждам string str = "abcd"

2. Използвам метода str.ToCharArray() върху string-a и го присвоявам на      char[ ] strArr за да направя string-a масив от чарове.

3. Reverse-вам масива-a с Array.Reverse(strArr),

ТУК ИДВА ИНТЕРЕСНОТО

4. Тук вече принтирам на конзолата масива, но не как да е, а директно с Console.WriteLine(strArr), а както знаем един масив (int[ ] или какъвто и да е) ако го принтираш директно - като резултат ти връща System.Int32[ ]  и за това трябва да го обходим с for или foreach цикъл.

Char масив НЕ трябва да го обхождаме, а можеме директно да го принтнеме с Console.WriteLine. Това се дължи на факта, че единият от overload-натите методите на Console.WriteLine е за char масив, това е 4-ят който е Console.WriteLine(char buffer) - където char buffer е самият масив

 

Също така има още един метод 16-ят :

Console.WriteLine(char buffer, int index, int count) - като мястото на char buffer задаваме масива например strArr, на int index задаваме от кой индекс да започне, а на int count задаваме до каква дължина да принтиме. Прилича малко  на метода .substring, само че за char масив.

Да си припомним какво е overload-нат метод - това е мотед с едно Име, но с различни параметри които му се подават в случая с Console.WriteLine() имаме 19 overload-нати метода.

 

Как да разгледаме overload-натите методи на даден метод:

За тези който не са се сблъсквали или не са разглеждали overload-натите методите на някой метод може да ги разглеждат като: когато отворите първата скоба на някой метод може да ги разцъкате нагоре надолу с стрелките и там пише 1 от 19 , 5 от 19  - в конкретния случай за Console.WriteLine()

 

Надявам се да съм бил полезен с това допълнение :)

Асси


от Assi.NET (3050 точки)


0
Много ми хареса, особено с разпечатването само с името на масива, като в конвенционалния С. Следователно, общоприетото разпечатване на целия масив само със задаване на името е в сила и тук, а стринговете са по-специални обекти :)

от ellapt (6303 точки)

0
И на мен ми хареса и се поразрових да видя защо само с char е така. И за това реших да го споделя ;)

от Assi.NET (3050 точки)


0

Да добавя само, че в задачата се казва да се reverse-не стринга и после да се изпринти. Това значи, че накрая char[] трябва да стане на string. Интересен е начина как се прави това - със string constuctor-а:

char[] arr = {'a', 'b', 'c'}

string word = new string(arr).

ЗАДАЧА 1


от AlexPopov (1568 точки)


0
Да това е начина ако пък искаш да го стрингосаш както казва НАКОВ :)

от Assi.NET (3050 точки)

0
Тва, което ти предложи е интуитивното решение, ама не работи така :)

от AlexPopov (1568 точки)



1

Понеже много обичам да работя с List<T>, я направих с него и след като го reverse-на го принтирам чрез Concat.

решение




0

Използвам метода Array.Reverse и конструктура string(char[] array).

Решение




0

Директно принтиране на стринга в обратен ред с използване на String.Length и for цикъл. Предполагам, че за голям стринг би било бавно, но за нашите цели работи:

http://pastebin.com/qeKWs7WM


от sylviapsh (302 точки)


2

употребата на класа StringBuilder в случая  е особено подходяща, както и в следващите задачи предполагам. В книгата Въведение в програмирането има точно този пример описан. Вместо сами да си строим масив от char, класът го прави вместо нас. И по дефиниция работи по-бързо, отколкото обикновените операции с низове.

        string input = Console.ReadLine();
        StringBuilder reversed = new StringBuilder();
 
        for (int i = input.Length-1; i >= 0; i--)
        {
            reversed.Append(input[i]);
        }

        Console.WriteLine(reversed);

като не забравяме да включим най-отгоре един using statement:

using System.Text; в който се намира класа StringBuilder 


от pdrenovska (2196 точки)


0
Да, наистина със StringBuilder е по-бързо. Може и предварително да се задели достатъчно памет, тъй като е известна с new StringBuilder(input.Length);

от jasssonpet (6814 точки)


0

Решение

обръщам входа към масив от char, reverse-вам го и го принтя накрая символ по символ, защото с ToString() ще излезнат глупости. 


от Rokata (397 точки)


0

Създавам си метод, в който чета стринга отзад напред и записвам в нова променлива от тип StringBuilder. Ето и решението: http://pastebin.com/b9eLSWLH




0
Аз съм използвал StringBuilder, защото това е по бърз начин за обръщането на даден текст: http://pastebin.com/8mqVFbi9

от Plamen.Minkov (216 точки)


0
Ето и моето решение.
http://pastebin.com/UpUDcLCB



0
http://pastebin.com/zc19xST8 - правя входа .ToCharArray() и му прилагам Reverse. Създавам StringBuilder и с един for цикъл добавям всеки един елемент на масива. После StringBuilder-a го правя string с ToString().

от agentzero (0 точки)