
C#
Добавить символ в конце введённой строки, если количество символов нечётное, на C#
Делаю программу, которая меняет местами каждые два символа, и если количество введенных символов нечетное, то нужно добавить '*' в конце строки. проблема с добавлением символа, помогите пожалуйста


да нормально написано, прям как учат в универе: максимально просто, максимально многословно... а придраться всегда к чему-то можно, например:
1)
.ToArray() для строк вполне можно использовать, но .ToCharArray() работает раз так в 10-15 быстрее. в этой задаче не критично, но знать стоит.
2)
for (int i = 0; i < s.Length - 1; i += 2) это правильно, но s.Length - 1 будет вычисляться при каждой итерации... Да, это мелочь, но оно тебе надо? лучше вынести в отдельную переменную перед циклом или перестроить цикл, например так:
for (int i = 1; i < s.Length; i += 2)
3)
обмен значений правильный, тут по большей части вкусовщина... можно через создании временной переменной сделать, можно через сложение/вычитание, можно вообще через xor, но все это 5 строк... мне больше нравится в 1 через кортежи:
(s[i - 1], s[i]) = (s[i], s[i - 1])
4)
s.Length % 2 == 0 прям как по учебнику), но раз уж придираться, то почему бы деление на заменить на проверку последнего бита на нечетность, например так: (s.Length & 0) == 1
ну и получим что-то вроде такого:
var s = Console.ReadLine().ToCharArray();
for (int i = 1; i < s.Length; i += 2) (s[i - 1], s[i]) = (s[i], s[i - 1]);
Console.WriteLine(new string(s) + ((s.Length & 1) == 1 ? "*" : ""));
1)
.ToArray() для строк вполне можно использовать, но .ToCharArray() работает раз так в 10-15 быстрее. в этой задаче не критично, но знать стоит.
2)
for (int i = 0; i < s.Length - 1; i += 2) это правильно, но s.Length - 1 будет вычисляться при каждой итерации... Да, это мелочь, но оно тебе надо? лучше вынести в отдельную переменную перед циклом или перестроить цикл, например так:
for (int i = 1; i < s.Length; i += 2)
3)
обмен значений правильный, тут по большей части вкусовщина... можно через создании временной переменной сделать, можно через сложение/вычитание, можно вообще через xor, но все это 5 строк... мне больше нравится в 1 через кортежи:
(s[i - 1], s[i]) = (s[i], s[i - 1])
4)
s.Length % 2 == 0 прям как по учебнику), но раз уж придираться, то почему бы деление на заменить на проверку последнего бита на нечетность, например так: (s.Length & 0) == 1
ну и получим что-то вроде такого:
var s = Console.ReadLine().ToCharArray();
for (int i = 1; i < s.Length; i += 2) (s[i - 1], s[i]) = (s[i], s[i - 1]);
Console.WriteLine(new string(s) + ((s.Length & 1) == 1 ? "*" : ""));
Несколько грязновато, но лень напрягаться:
s=new string(s.Append('*').ToArray());
Вообще-то для работы со строками удобно использовать класс StringBuilder - изучи его, юный падаван.
s=new string(s.Append('*').ToArray());
Вообще-то для работы со строками удобно использовать класс StringBuilder - изучи его, юный падаван.
Похожие вопросы
- Нахождение одинаковой последовательности трех символов в двух переменных типа строка
- (c#) Нужна помощь в работе со строками. (лучше если будет не само решение, а объяснение, спасибо)
- C#: Умножения чисел(чисел в строках) больших Int64 MaxValue без использования System.Numerics и BigInteger
- Как добавить таймер c#
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#