Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » [ЗАДАЧА] Выравнивание столбцов
[ЗАДАЧА] Выравнивание столбцов
TEIN Дата: Среда, 29.05.2013, 15:30:39 | Сообщение # 1
Сообщений: 550
Репутация: 73 [ +/- ]
Допустим есть 4 строки
Код
new String:String_1[] = "123",
       String:String_2[] = "1324",
       String:String_3[] = "12345",
       String:String_4[] = "123456";

При старте плагина, показывать два столбца, один стоблец, сами строки, а второй - длина строки
Примерно так:
Код
Строка:     Длина строки
1. 123         3
2. 1234       4
3. 12345     5
4. 123456   6

То есть задача выровнять столбцы
Чтобы не получилось так
Код
Строка: Длина строки  
1. 123 3  
2. 1234 4  
3. 12345 5  
4. 123456 6
 
NANO_VIRUS Дата: Среда, 29.05.2013, 17:07:29 | Сообщение # 2
Сообщений: 41
Репутация: 0 [ +/- ]
Код
public OnPluginStart()
{
new String:String_1[] = "123",
String:String_2[] = "1324",
String:String_3[] = "12345",
String:String_4[] = "123456";
PrintToServer("Строка:    Длина строки\n%s    %d\n%s    %d\n%s    %d\n%s    %d", String_1, strlen(String_1), String_2, strlen(String_2), String_3, strlen(String_3), String_4, strlen(String_4));
}


Сообщение отредактировал NANO_VIRUS - Среда, 29.05.2013, 17:10:42
 
Scarface_slv Дата: Среда, 29.05.2013, 18:24:51 | Сообщение # 3
Сообщений: 749
Репутация: 61 [ +/- ]
Код

public OnMapStart()
{
           new String:Text[4][10] = {"123", "1324", "12345", "123456"};
           PrintToServer("%-10.6s %-32.31s", "String:", "StrLen:");
           for (new i = 0; i < 4; i++) PrintToServer("%-10.6s %-32.31d", Text[i], strlen(Text[i]));
}


Сообщение отредактировал Scarface_slv - Среда, 29.05.2013, 18:25:33
 
TEIN Дата: Четверг, 30.05.2013, 04:45:22 | Сообщение # 4
Сообщений: 550
Репутация: 73 [ +/- ]
Длина строки нам неизвестна совсем, где-то может 1 знак, где-то 20
 
Scarface_slv Дата: Четверг, 30.05.2013, 09:59:36 | Сообщение # 5
Сообщений: 749
Репутация: 61 [ +/- ]
??
Код

  new String:Text[][] = {"123", "1324", "12345", "123456"};
  PrintToServer("%-10.6s %-32.31s", "String:", "StrLen:");
  for (new i = 0; i < sizeof(Text); i++) PrintToServer("%-10.6s %-32.31d", Text[i], strlen(Text[i]));
 
TEIN Дата: Четверг, 30.05.2013, 10:31:24 | Сообщение # 6
Сообщений: 550
Репутация: 73 [ +/- ]
Ну попробуй вывести строку, "12365479879874454" - сбивается
 
TEIN Дата: Четверг, 30.05.2013, 10:53:21 | Сообщение # 7
Сообщений: 550
Репутация: 73 [ +/- ]
Как то так.

Прикрепления: ttt.sp(1Kb)
 
NANO_VIRUS Дата: Четверг, 30.05.2013, 14:01:55 | Сообщение # 8
Сообщений: 41
Репутация: 0 [ +/- ]
а аа мой вариант?
 
TEIN Дата: Четверг, 30.05.2013, 14:11:06 | Сообщение # 9
Сообщений: 550
Репутация: 73 [ +/- ]
Использовал таб? не подойдет
 
NANO_VIRUS Дата: Четверг, 30.05.2013, 14:23:35 | Сообщение # 10
Сообщений: 41
Репутация: 0 [ +/- ]
а чем плох этот вариант?. Мне просто чтобы знать)
 
TEIN Дата: Четверг, 30.05.2013, 14:28:08 | Сообщение # 11
Сообщений: 550
Репутация: 73 [ +/- ]
пробуй вместе с табом
123456789123456789
1
выравни
 
Sallcom Дата: Четверг, 02.10.2014, 11:16:03 | Сообщение # 12
Сообщений: 206
Репутация: 31 [ +/- ]
Взял код Scarface_slv'a и добавил изменение формата вывода, так как у него было ограничение на 6 символов в исходной строке, а так же 2 столбец всегда начинался после 10 символов.

P.S. Вариант TEIN'a тоже не плох, но вручную добавлять в строку пробелы неправильно, так как есть формат вывода.
Код

#include <sourcemod>       

public OnMapStart(){
         new String:sFormat[32] = "%-X.Xs %-32.31s",
                String:sList[][] = {"1", "12","123", "1234", "12345", "123456", "1234567", "12345678", "123456789"},
                String:sMaxStrLen[4];

         for(new i = 0; i < sizeof(sList); i++)
             Format(sMaxStrLen, 4, "%i", StringToInt(sMaxStrLen) > strlen(sList[i]) ? StringToInt(sMaxStrLen) : strlen(sList[i]));

         ReplaceString(sFormat, 32, "X", sMaxStrLen);//Заменяем X на максимальную длину строк
         PrintToServer(sFormat, "String:", "StrLen:");      
         sFormat[strlen(sFormat)-1] = 'i';//Заменяем %s на %i после вывода заголовка таблицы

         for(new i = 0; i < sizeof(sList); i++)
             PrintToServer(sFormat, sList[i], strlen(sList[i]));
}


Сообщение отредактировал Sallcom - Четверг, 02.10.2014, 11:27:20
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » [ЗАДАЧА] Выравнивание столбцов
Страница 1 из 11
Поиск: