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


3

Условие: Write a program that reads from the console a string of maximum 20 characters. If the length of the string is less than 20, the rest of the characters should be filled with '*'. Print the result string into the console.

Решениеsource.

Обяснение: Използваме PadRight() за да добавим липсващите символи.




Отговори



5

Едно малко по разбито решение на стъпки.

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

Не че в случая е нещо сложно, но просто за начинаещ е по разбираемо :)

Решение:

http://pastebin.com/GjX8RAfE

Обяснение:

Обяснението е да се проследят постъпково какво се случва и да се погледне как работи метода PadRight()

 

Асси


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


1

Решила съм задачата със StringBuilder. Първоначално го правя да съдържа въведения текст, после с while цикъл, докато дължината му е по-малка от 20, добавям звездички. Имам и проверка дали въведения стринг е с повече от 20 символа.

http://pastebin.com/LUjXKat0




2

И моят вариант: http://pastebin.com/CibKB1xM

- прочитаме някакъв стринг

- ако е по-къс от 20 символа, взимаме липсващата дължина

- създаваме нов стринг от '*' с тази дължина

- долепяме двата стринга и отпечатваме


от Mitko_Mitev (1276 точки)


0
точно такава е и моята логика, само че ако потребителя е въвел повече от 20 символа отрязва излишните. Това че му казваме да не въвежда повече от 20 не би го спряло :)
Console.WriteLine("Enter string of maximum 20 characters: "); string input = Console.ReadLine(); if (input.Length > 20) { input = input.Substring(0, 20); } else if (input.Length < 20) { input += new string('*', 20 - input.Length); } Console.WriteLine(input);
И, да, наистина човек ако се заиграе и има време, би могъл да увеличи бързодействието чрез StringBuilder...

от pdrenovska (2196 точки)


0

Допълвам стринга с .Insert(new string('*' , нужният_брой_до_20))

решение




1

Нищо особенно само има проверка на входа за символите - ако са точно нищо, ако са по малко -> допълва, ако са повече -> отрязва до 20

http://pastebin.com/2nNaKR5s


от ge_or_gi (110 точки)


0
Добре е, но в момента се чупи в случаите, когато стрингът е по-голям от 20 символа, защото си сложил две последователни if кструкции, условието на първата е изпълнено и изпълнява тялото, след което влиза в следващия if, условието му не е изпълнено и съответно изпълнява else-а, койтовсъщност е трети случай. Само трябва да промениш и вторият if да е else if и тогава е коректнопо логика.

от Margarita (40 точки)


3
Идеята тук, споре мен, е да се упражни основата на StringBuilder-a, който работи по-бързо от конкатенацията на стрингове..
for (int i = 1; i < 20 - text.Length; i++) { sb.Append('*'); }

от zhelyazkovn (2949 точки)


0
Може направо: for (int i = text.Length; i <= 20; i++)

от jasssonpet (6814 точки)

0
Защо трябва да се върти цикъл ? sb.Append('*', 20 - sb.Length); :)

от Georgi Georgiev 1 (0 точки)


0

jasssonpet,  къде ти  е решението на първата част от условието reads from the console a string of maximum 20 characters. А резултатният стринг всъщност не го пазиш никъде. Наистина са ти кратки и готино-изглеждащи решенията (понякога трудно-разбираеми), но този код аз (или който и да е) няма как да го преизползвам за друг проблем. 


от pdrenovska (2196 точки)


0
Здравей, благодаря за забележката. Не съм прочел, че трябва да е максимум 20 символа. Поправих го и го направих малко по-общо решението.

от jasssonpet (6814 точки)


1

Моето решение не ползва PadRight() и май няма нужда от обяснение:

 

Console.WriteLine("Enter a string with 20 characters:");
string remaining = null;
string str = Console.ReadLine();
if (str.Length < 20)
{
      remaining = new string ('*',20-str.Length);
}
Console.WriteLine("{0}{1}", str, remaining);

от petromaxa (577 точки)


0
едно решение и от мен, нищо особено, просто видях че няма точно такова и реших да го постна :)
http://pastebin.com/mwxtLPjY



0

Решение

ако е над 20 символа -  exception, в противен случай - конкатенирам със стринг от звездички повторен (разликата м/у 20 и дължината на въведения) пъти. 


от Rokata (397 точки)


0
Аз пак пускам мойто заврътяно решение...стрингове....листове...цикли....100% ще се заплета на някоя задача на изпита с този мой подход... http://pastebin.com/6QWz7ss9

от borro (15 точки)


0
наистина, защо излишно го усложняваш, с този лист, добавяш всички символи от входа, и после взимаш дължината на листа! Защо просто не вземеш дължината на входния низ?! Ако е по-малка от 20 ще конкатенириш с new string('*', 20-text.Length) и готово. И друго - в условието пише да се чете от конзолата, а не готов низ. Не е кой знае какво, но на някой изпит може да те изиграе

от pdrenovska (2196 точки)

0
Новак съм и малко ме няма в оптимизацията все още :)

от borro (15 точки)