Имеется n
строк и n
чисел. Нужно вывести их так, чтобы числа начинались с одинаковой позиции в строке:
первый 1
второе число 2
три 3
Подскажите, пожалуйста, как это сделать?
string[] strings = { "первый", "второе число", "три" };
int[] ints = { 1, 2, 3 };
// Используем LINQ, что парится-то с циклами лишними.
// Считать длину строки в любом случае нужно.
int maxlength = strings.Max(x => x.Length);
for (int i = 0; i < strings.Length; i++)
Console.WriteLine($"{strings[i].PadRight(maxlength, ' ')} {ints[i]}");
Вывод можно и другими способами делать:
for (int i = 0; i < strings.Length; i++)
Console.WriteLine($"{{0,-{maxlength}}} {{1}}", strings[i], ints[i]);
или
for (int i = 0; i < strings.Length; i++)
Console.WriteLine("{0,-" + maxlength + "} {1}", strings[i], ints[i]);
или
for (int i = 0; i < strings.Length; i++)
Console.WriteLine(string.Join(" ", strings[i].PadRight(maxlength, ' '), ints[i]));
Наверняка, можно ещё придумать кучу разных способов.
Console.WriteLine("Введите строки через знак \".\"");
string [] strings = Console.ReadLine().Split('.');
int maxlen = 0, index = 0;
for (int i = 0; i < strings.Length; i++)
{
if (strings[i].Length > maxlen)
{
maxlen = strings [i].Length;
index = i;
}
}
string temp;
foreach (string item in strings)
{
if (item == strings [index])
{
Console.WriteLine($"{item} {strings.ToList().IndexOf(item) + 1}");
}
else
{
temp = item;
do
{
temp +=" ";
} while (temp.Length != strings[index].Length+1);
Console.WriteLine($"{temp}{strings.ToList().IndexOf(item) + 1}");
}
temp = "";
}
Console.ReadKey();
Вот как-то так. Получаем все строки с разделителем в виде точки. Потом мы находим самое длинное слово, и записываем его индекс в переменную. Потом в цикле мы выводя строки и их индексы в консоль, мы проверяем самое длинное это слово, и если да, выводим его с 1 пробелом, а если нет, то добавляем пробелы пока длина не совпадёт. Думаю в качестве примера подойдёт.
Источник кода по поиску самого длинного слова: http://www.cyberforum.ru/csharp-beginners/thread148624.html
Для форматирования (выравнивания реже), используется, как правило string.Format
.
static void Main() {
Console.WriteLine(string.Format("{0,-20} {1,-10}", "первый",1));
Console.WriteLine(string.Format("{0,-20} {1,-10}", "второе число",2));
Console.WriteLine(string.Format("{0,-20} {1,-10}", "третье",3));
// Можно упростить, но цель, показать что string.Format работает
Console.WriteLine("{0,-20} {1,-10}", "первый",1);
}
Ещё... есть вариант string.Format($"{a,10}")
и Console.WriteLine($"{a,10}")
Как правило, место для выравнивание резервируется заранее. При превышении знаков - место не сохраняется.
string.Format("{0,-20}"
- выранивание на 20 слеваstring.Format("{0,-20}"
- выранивание на 20 справаstring.Format("{1,-20:0.00}"
- форматирование плюс выравниваниеЕщё ссылки
P.S. Есть и другие способы форматирования, не буду их рассматривать подробно. Отмечу разве что String.PadLeft
и String.PadRight
эти ф-ции можно встроить в цикл, или лямду.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Написал свой стиль для DataGridColumnHeader, но теперь нет возможности изменять длину столбцовКак сделать реализацию изменения длины столбцов?
У меня естьnet core проект, есть экшен который защищен reCaptcha