Loading...
dunedanetz avatar dunedanetz 5 Точки

string vs. new string

Здравейте,

Моля за малко помощ относно разликите между string и new string и кога кое се използва. Знам, че ще поема минуси и въпроси защо не съм потърсил в нета, като отговорът е, че потърсих, но за съжаление не намерих нещо, което да възприема и схвана... Ето ще дам един пример защо в единия случай се изпечатват 10 звездички, а в другия случай само една...

http://pastebin.com/67e3KiLb

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

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

0
Programming Basics
Alex0101 avatar Alex0101 374 Точки
Best Answer

Здравей ,

Ще се опитам да ти го обясня подробно.

string str= new string('*',10);

В тази конструкция  декларираш променливата str от тип string и ползваш конструктура на string, който приема char и колко пъти да го повтори. Ако го ползваш самостоятлено реда, както правиш в твоя пример в първия ред, може да използваш директно.

string str = "**********";

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

Console.Write(new string('*',10));

В този случай, както беше споменал колега по-горе, в Write() подаваш string, като в случай го правиш директно през конструктура на string - new string(); 

Важното е да запомниш, че new string() изисква два параметъра - char  и int.

Пример:

Ако трябва да принтираш редове от '*' /звездички/, като броят на звездичките варира използваш следната конструкция.

Пиша къс примерен код, без цикъл, за да не натоварваме записа.

Console.Write(new string('*', n)); // symbol * will be printed n times
Console.WriteLine();//moving cursor to the next line
Console.Write(new string('*',n+1)); //symbol * will be printed n+1 times
Console.WriteLine();//moving cursor to the next line
Console.Write(new string('*',n+2)); //symbol * will be printed n+2 times
Console.WriteLine();//moving cursor to the next line

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

Успех!

5
10/05/2016 14:42:47
dunedanetz avatar dunedanetz 5 Точки

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

1
stefan_maslarski avatar stefan_maslarski 14 Точки

Здравей,

думата "new" означава, че създаваш нова инстанция от обекта/класа string. Това е.  

2
TanyaZheleva avatar TanyaZheleva 354 Точки

String ти е просто типа данни.  New string (буквално нов стринг) - при него ти посочваш дължината и символа, който искаш да повтаряш.

0
MariyanMlechenkov avatar MariyanMlechenkov 29 Точки

В първи случай използваш конструктур на string за да повторириш символа при печат, след което всичко на готово го печаташ.

Във втория ползваш конструктор на WriteLine - на който подаваш нещо (текст) и му задаваш, колкото пъти да го повтори.

0
10/05/2016 14:24:30
GapoBG avatar GapoBG 15 Точки

Искам да питам нещо:

new string('*',n) , работи като отпечатва N на брой '*' (звеза в случая),защото е символа е char

как мога да задам да печта два символа N на брой : например '-*' който вече са си стринг.

Зада получа например повторение -*-*-*-* (4N)

 

0
alex1966 avatar alex1966 255 Точки

Не ти трябва new string тогава, просто с 1 променлива и for цикъл:
 

          string symbols = "-*";

          for (int i = 0; i < n; i++)   

        {

              Console.Write(symbols);  

         }

0
30/01/2017 09:45:24
RoYaL avatar RoYaL Trainer 6849 Точки

То по принцип и за N звездички не ти трябва new string и може с цикъл :)

Принципно, за да не правиш цикъл (ръчно, защото то така или иначе ще се случи отдолу и при new string) може да използваш LINQ библиотеката, за да генерираш поток от стрингове (IEnumerable<string>) чрез Enumerable.Repeat

Enumerable.Repeat("-*", 10)

Ще върне IEnumerable<string>, в който има 10 стрингови елемента "-*", което може да си го представиш като стрингов масив ( string[] x = {"-*", "-*", "-*"} ). После можеш с добрия string.Join() да съединиш елементите до един стринг и д ги отпечаш на екрана. Или да използваш акумилираща функция, на която да и кажеш за всяка двойка елементи да изпълнява съединянаване (конкатенация). Ето ги вариантите:

1. Съединяваме 10те елемента с разделител "" (нищо), т.е. буквално ги долепяме един до друг:

        var result = string.Join("", Enumerable.Repeat("-*", 10));
        Console.WriteLine(result);

2. Казваме за всяка двойка елементи от потока от стрингове да се изпълни агрегатна функция, която да извършва съединяване между тях (всъщност между последния елемент и резултата до момента):

        var result = Enumerable.Repeat("-*", 10).Aggregate((firstElement, secondElement) => firstElement + secondElement);
        Console.WriteLine(result);

3. Казваме на всяка двойка елементи от потока от стригове да се изпълни вградената функция Concat от класа string, която приема два низа и връща резултат - съединените два стринга в един (pretty much прави това, което прави нашата функция по-горе, само че е вградена и записът е по-четим):

        var result = Enumerable.Repeat("-*", 10).Aggregate(string.Concat);
        Console.WriteLine(result);

 

2
MihaelaKostova avatar MihaelaKostova 4 Точки

Здрасти, исках само да ти кажа, че специално този форум не е като всички останали, където всеки те обижда колко си елементарен и едва тогава ти отговаря на въпроса. Аз също като теб започнах да задавам въпроси първо с предразсъдъци, че всички ще ме разкъсат от подигравки и т.н.

Но истината е, че всеки тук ще ти помогне, дори да зададеш въпроса си няколко пъти. Няма глупави въпроси, така че не се притеснявай и питай. Успех!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.