beginer_38
(Programmer in future)
21.Октябрь.2020 17:44:51
#1
Начал изучать С#. Не совсем понимаю некоторые моменты в этом коде:
Console.Write("Enter a word: ");
string str2 = Console.ReadLine();
string[] arr = str2.ToLower().Split(new char[] {' '});
string[] newArr = new string[arr.Length];
char ch1;
for (int i = 0; i < arr.Length; i++)
{
ch1 = arr[0][0];
newArr[i] = arr[i].Replace(ch1.ToString(), "");
if (i == 0)
Console.Write(ch1);
Console.WriteLine(newArr[i]);
}
Console.WriteLine();
Не понимаю, что происходит в цикле. Помогите разобраться пожалуйста.
Что мешает запустить в отладчике и посмотреть на каждом шаге что происходит со строкой?
AlexP
(Alex P.)
21.Октябрь.2020 18:40:26
#3
Потому что автор кода не дал нормальные имена переменным
Да и тут бред написан
Пишет “введите слово”, а потом разделяет строку по пробелам. Откуда в одном слове пробелы возьмутся.
Так а где код найден был? Там не описана задача?)
Тогда можно ж просто запустить и посмотреть.
Или с отладчиком пройти. https://docs.microsoft.com/ru-ru/visualstudio/get-started/csharp/tutorial-debugger?toc=%2Fvisualstudio%2Fdebugger%2Ftoc.json&view=vs-2019#set-a-breakpoint-and-start-the-debugger
Похоже, удаляет первую букву первого слова из всех слов кроме первого:
Enter a word: foo bar foobar barfoo
foo
bar
oobar
baroo
beginer_38
(Programmer in future)
21.Октябрь.2020 18:42:33
#4
Условие такое вообще:
“Удалить из слова все последующие вхождения первого символа”
beginer_38
(Programmer in future)
21.Октябрь.2020 18:44:08
#5
То есть если написать ананас, получится аннс. Оно как бы работает, но я не понимаю. А описания нет никакого
AlexP
(Alex P.)
21.Октябрь.2020 18:53:10
#6
Автор кода явно не понял и на самом деле сделал это:
А это в две строки без циклов решается:
Console.Write("Enter a word: ");
string word = Console.ReadLine().Trim().ToLower();
string firstLetter = word[0].ToString();
string newWord = firstLetter + word.Substring(1).Replace(firstLetter, "");
Console.WriteLine(newWord);
beginer_38
(Programmer in future)
21.Октябрь.2020 18:57:30
#7
Ну тут понятнее все гораздо. Спасибо большое
beginer_38
(Programmer in future)
22.Октябрь.2020 11:15:53
#8
А вот тут можно сделать также изящно:
“Удалить в слове только последние вхождения каждого символа”?
То есть если пишешь слово “папа”, получается “па”
beginer_38
(Programmer in future)
22.Октябрь.2020 11:18:58
#9
Я пытался использовать LastIndexOfAny, но наверно я не правильно понимаю смысл этого метода.
AleksandrH
(AleksandrH.)
22.Октябрь.2020 12:07:40
#10
beginer_38:
“Удалить в слове только последние вхождения каждого символа”?
То есть если пишешь слово “папа”, получается “па”
Без LastIndexOfAny
using System;
using System.Linq;
public class Program
{
public static string Reverse( string s )
{
char[] charArray = s.ToCharArray();
Array.Reverse( charArray );
return new string( charArray );
}
public static void Main()
{
string code = "gfgf";
Console.WriteLine(code);
string answer = new String(code.Distinct().ToArray());
for(int i = 0; i < answer.Length; i++)
{
Console.WriteLine("\nCharacter: {0}",answer[i]);
int first = code.IndexOf(answer[i]);
Console.WriteLine("First occurrence: {0}", first);
string code_r = Reverse(code);
int at = code.Length - code_r.IndexOf(answer[i]) - 1;
Console.WriteLine("Last occurrence: {0}", at);
Console.WriteLine(" Before deleting {0}",code);
if(at > first && at <= code.Length)
{
code = code.Remove(at,1);
Console.WriteLine(" After deleting {0}",code);
}
}
Console.WriteLine();
Console.WriteLine(code);
}
}
1 лайк
AlexP
(Alex P.)
22.Октябрь.2020 13:14:59
#11
Так вроде бы работает
Console.Write("Enter a word: ");
string word = Console.ReadLine().Trim().ToLower();
var uniqueLetters = word.Distinct();
foreach (var letter in uniqueLetters)
{
word = word.Remove(word.LastIndexOf(letter), 1);
}
Console.WriteLine(word);
1 лайк
beginer_38
(Programmer in future)
22.Октябрь.2020 13:33:49
#12
Красиво, но работает некорректно. Если вхождение одно, то символ тоже удаляется.
AlexP
(Alex P.)
22.Октябрь.2020 13:36:26
#13
Так а это некорректно? В задаче не сказано про это. Если вхождение одно, то оно и есть последнее )
beginer_38
(Programmer in future)
22.Октябрь.2020 13:37:24
#14
Согласен, надо бы уточнить