Русское сообщество по скриптингу

Дополнить строку до нужного количества знаков  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Дополнить строку до нужного количества знаков

Сообщение EbGiK » 08 авг 2017, 23:12

ну я на всякий случай ставлю

Оно при компиляции ставится само

я про return PLUGIN_HANDLED, а не return 0, return 1

Строки с русским текстом не правильно форматируются, как сделать, чтоб русскоязычные строки заполнялись нужным числом пробелов?
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>


public plugin_init() {
    register_clcmd("test", "start")
}


public start(){
    new str_1[32], str_2[32], strFull[32]
    
    str_1 
= "test"
    str_2 = "тест"
    
    formatex
(strFull, charsmax(strFull), "^"%15s^"", str_1)
    client_print(0, print_console, "%s", strFull)//правильно отображается
    
    formatex
(strFull, charsmax(strFull), "^"%15s^"", str_2)
    client_print(0, print_console, "%s", strFull)//не правильно отображается
    
    return PLUGIN_HANDLED

}

тут тоже не понятно
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>


public plugin_init() {
    register_clcmd("test", "start")
}


public start(){
    new str_1[32], str_2[32], strFull[32]
    
    str_1 
= "test"
    str_2 = "тест"
    
    formatex
(strFull, charsmax(strFull), "^"%15s^"", str_1)
    client_print(0, print_console, "%s", strFull)
    client_print(0, print_console, "strlen(str_1) = %d", strlen(str_1))
    
    
    formatex
(strFull, charsmax(strFull), "^"%15s^"", str_2)
    client_print(0, print_console, "%s", strFull)
    client_print(0, print_console, "strlen(str_2) = %d", strlen(str_2))
    
    return PLUGIN_HANDLED

}

"test " - тут 11 пробелов, сайт не отображает
strlen(str_1) = 4
"тест " - тут 7 пробелов
strlen(str_2)
----------------------------------------
Почему strlen(str_1) = 4 ? В строке 15 символов в конце #0
Аватара пользователя
EbGiK
 
Сообщения: 192
Зарегистрирован: 05 фев 2016, 16:40
Благодарил (а): 43 раз.
Поблагодарили: 3 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Дополнить строку до нужного количества знаков

Сообщение артист666 » 08 авг 2017, 23:22

Русский текст, т.е. UTF-8, занимает 2 байта на букву.

Получаешь длину русского текста, делишь на 2, дополняешь.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Дополнить строку до нужного количества знаков

Сообщение EbGiK » 08 авг 2017, 23:54

Получаешь длину русского текста, делишь на 2, дополняешь.

ну я когда написал об этом же подумал
Получаешь длину русского текста, делишь на 2, дополняешь.

не получается так, я вывожу 15 байт
Код: Выделить всё
formatex(strFull, charsmax(strFull), "%15s#", str

мне выводится 11 символов
Все разобрался, просто тут русские англиские и цифры занимают разное кол-во байт, да еще strlen это не кол-во символов, а байт и %15s тоже байты
Последний раз редактировалось EbGiK 09 авг 2017, 00:36, всего редактировалось 1 раз.
Аватара пользователя
EbGiK
 
Сообщения: 192
Зарегистрирован: 05 фев 2016, 16:40
Благодарил (а): 43 раз.
Поблагодарили: 3 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Дополнить строку до нужного количества знаков

Сообщение артист666 » 09 авг 2017, 00:36

Циклом.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Дополнить строку до нужного количества знаков

Сообщение EbGiK » 09 авг 2017, 10:50

Код: Выделить всё
formatex(strFull, charsmax(strFull), "%15s#", str)

А как форматировать строку в зависимости от условий, что то вроде заместо 15 поставить переменную

просто %15 - это кол-во байт, допустим есть задача дополнить строку до 10 символов

Есть строка 1, она 5 символов, она 5 байт, с %10s она заполнится 5 пробелами
Есть строка 2, она 5 символов, и она 6 байт, заполнится 4 пробелами
Получается не то что мы хотели
Аватара пользователя
EbGiK
 
Сообщения: 192
Зарегистрирован: 05 фев 2016, 16:40
Благодарил (а): 43 раз.
Поблагодарили: 3 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Дополнить строку до нужного количества знаков

Сообщение артист666 » 09 авг 2017, 13:12

Не получится.
Циклом делай.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Пред.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12