Професионална програма
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 6846 Точки

То по принцип и за 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