Професионална програма
Loading...
+ Нов въпрос
icko134 avatar icko134 0 Точки

Обработка на масив

Здравейте, вече 2 часа стоя и пробвам да реша една задача, но никакъв резултат. Ето я и нея: 

Обработка на масив

Вие ще получите масив от низове и трябва да изпълните командите под тях. Вие можете да получите три команди:

  • Reverseобръща реда в масива
  • Distinctизтрива всички неуникални (повтарящи се) елементи на масива
  • Replace {index} {string}замества елемента на дадената позиция index  с низ string, който ви е даден

Вход

  • На първи ред,  получавате масив от символни низове string array
  • На втори ред ще получите броя на редове, които следват
  • На следващите n реда ще получите команди

Изход

Изведете масива в следния формат:

{1st element}, {2nd element}, {3rd element} … {nth element}

Ще се радвам, ако някой ми помогне.

Тагове:
0
Fundamentals Module
svetoslav_0 avatar svetoslav_0 1005 Точки

Здравей, 

Имаш ли някакъв код, с който си започнал или поне представа как евентуално би могла да се реши тази задача? 

Бих могъл да ти я обясня доста подробно и да те убедя, че се решава доста лесно :)

0
icko134 avatar icko134 0 Точки

Ами да, имам код, но все още съм нов, а и тези масиви направо ми разказват играта. Ако искаш мога да го изпратя, но е само до едно място и няма много смисъл.

https://pastebin.com/Y2JGykxx

И доста бих се радвал на подробно обяснение. :)

 

0
svetoslav_0 avatar svetoslav_0 1005 Точки

 Не се тревожи, всеки е тръгнал от някъде. Колкото до масивите - само изглеждат страшни. Не са малка хапка, но много бързо се свъква с тях и в един момент започваш да правиш какви ли не сложни операции с масиви без изобщо да ти прави впечатление. Важното е да не се отказваш и да продължаваш напред :)

Дай ми няколко минути да опиша всичко по задачата :)

0
svetoslav_0 avatar svetoslav_0 1005 Точки

Понеже не знам от къде е взета задачата, имай предвид, че не се водя 1:1 с условието и Judge може и да не ти даде 100/100.
Така, първото нещо, което трябва да направим, е да си прочетем входните данни:

string[] arr = Console.ReadLine().Split();

Тази променлива ще съхранява нашия масив от думички -> прочитаме си един ред от конзолата, след което му прилагаме метода Split(), който взема този ред, който сме си прочели от конзолата и го разбива на отделни думички (ако не му кажем по какво да разделя, то по подразбиране ги разделя по space).

След това си прочитаме едно число, което ще определя колко операции ще бъдат извършени и въртим един цикъл толкова на брой пъти. Нищо сложно до тук, нали? :)
Вътре в този цикъл си прочитаме по един ред всеки път, който представлява нашата команда:

string[] command = Console.ReadLine().Split();

Отново е необходимо да го Split-нем, тъй като последната команда - Replace, има и други данни със себе си. По този начин, ако ни се въведе Reverse или Distinct, ще имаме масив от една единствена дума (съответно Reverse или Distinct). Но ако ни е въведено Replace, то тогава в масива command ще имаме три елемента: думичката Replace, индекса и думата, която трябва да сложим на този индекс. 
От там ти си продължил с if проверки, което няма лошо. Лично аз предпочитам switch:

switch (command[0].ToLower())

В него си взимаме първия елемент от масива command, в който сме на 100% сигурни, че се съдържа нашата думичка, която показва каква всъщност е командата - Reverse, Distinct или Replace. Добре е в такива ситуации да се използва ToLower() метода, който ще направи всички букви малки. Така Reverse и reverse стават едно и също нещо. Предимството е, че когато пишем case-овете, не се налага всеки път да ги пишем с главна буква (виж следващия ред). От тук логиката ни се разделя на три:

case "reverse":
    Array.Reverse(arr);
    break;

Навлизаме в същинската част на задачата, но се оказва, че за да завъртим един масив наобратно, си има вградем метод. Яко, а? :)

case "distinct":
    arr = arr.Distinct().ToArray();
    break;

Както предния път - имаме вграден метод. Разликата тук е, че ако просто кажеш arr.Distinct() няма да стане нищо. Необходимо е да се присвои на нещо, в случая на същото...Защо е така => можеш да прочетеш за разликата между Value type и Reference type.

case "replace":
    int index = int.Parse(command[1]);
    string newWord = command[2];
    arr[index] = newWord;
    break;

Последното е най-просто. Създаваме си променлива index, която е вторият елемент от масива command. Необходимо е да я Prase-нем, тъй като command е масив от стрингове, а индексът е число. И една променлива newWord, която е новата дума, която ще замени старата. След това просто казваме arr[index] = newWord; В масива arr, на позиция index сложи стойност newWord. И с това се изчерпваме :)
Последното, което остава е да принираме резултата:

Console.WriteLine(string.Join(", ", arr));

string.Join() ще вземе целия масив, и ще го принтира като стринг, като за разделител между отделните стойности ще сложи запетайка и един space (", ").
Предполагам успях да те убедя, че е съвсем простичко. Ако нещо не ти е ясно, питай, насреща съм :)

Цялостен код: https://pastebin.com/HAjWKHXY

2
21/03/2019 00:37:34