Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 75
1

Управление регистром строки

12.02.2017, 03:42. Показов 890. Ответов 7

Author24 — интернет-сервис помощи студентам
Не получается перевести строку в нижний регистр.

Вот так работает:
C++
1
2
3
4
5
6
7
8
9
char dest[256];
char test_string[] = "Hello";
int len = strlen(test_string);
for (int i = 0; i < len; i++)
{
    dest[i] = tolower(test_string[i]);
}
dest[len] = '\0';
logprintf("dest = '%s'", dest);
А вот здесь не хочет работать, при выводе строка остаётся прежней, не изменился регистр букв. Почему так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// native UpperToLower(string[]);
static cell AMX_NATIVE_CALL UpperToLower(AMX *amx, cell *params)
{
    char *string;
    char dest[256];
    amx_StrParam(amx, params[1], string);
    if (string != NULL)
    {
        int len = strlen(string);
        for (int i = 0; i < len; i++)
        {
            dest[i] = tolower(string[i]);
        }
        dest[len] = '\0';
        logprintf("dest = '%s'", dest);
    }
    cell *addr = NULL;
    amx_GetAddr(amx, params[1], &addr);
    amx_SetString(addr, string, 0, 0, 256);
    return 1;
}
Моё предположение, что не правильно объявлена (не правильно используется) переменная dest. Т.е. конфликт идёт между string и dest походу.
Если не понятно что за AMX_NATIVE_CALL , то вот описание - http://forum.sa-mp.com/showthread.php?t=295798
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2017, 03:42
Ответы с готовыми решениями:

Вывод символов с нижним регистром и верхним регистром
Стоит задача, водится строка, при выводе должно быть две строки, одна выводит символы только...

Возвращение строки с обратным регистром
Написать функцию, которая принимает строку и возвращает ее с обратным регистром. (3 балла) Пример:...

Работа с регистром
Встала такая задача при каждом изменении реквизита Статус и сохранении документа нужно создавать...

Ошибка с регистром
Переписывал функцию и столкнулся с проблемой. Не могу понять где ошибка в подпрограмме bool Ext()....

7
Заблокирован
12.02.2017, 06:00 2
пёс его знает чем занимаются неизвестные функции, почему бы не logprintf("%s", string); до 7-й строки
0
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 75
12.02.2017, 06:24  [ТС] 3
До 7 выводил, строка нормальная вышла.
0
Заблокирован
12.02.2017, 06:33 4
для чего вообще нужен dest , если потом нигде не используется?
1
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 75
12.02.2017, 06:58  [ТС] 5
Чтобы в нее записать результат от tolower. Разве без dest можно обойтись?

Добавлено через 17 минут
Я просто запутался. Но факт остается фактом, что в dest записалась прежняя строка, судя по logprintf. Без dest тоже самое - строка не перевелась в нижн.регистр.
0
Заблокирован
12.02.2017, 07:01 6
C++
1
2
3
4
5
6
7
8
9
10
    char dest[256]="";
    amx_StrParam(amx, params[1], string);
    if (string != NULL)
    {
        int len = strlen(string);
        for (int i = 0; i < len; i++)
        {
            dest[i] = tolower(string[i]);
            printf("%c  %s\n",tolower(string[i]), dest);
        }
0
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 75
12.02.2017, 21:22  [ТС] 7
Вообщем вся соль была в том, что кириллицу не перевела tolower. В самом 1-ом посте мой код 'почти' верен, но надо было конечно же заюзать setlocale:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// native _UpperToLower(string[]);
static cell AMX_NATIVE_CALL _UpperToLower(AMX *amx, cell *params)
{
    char *string;
    char dest[256];
    amx_StrParam(amx, params[1], string);
    if (string != NULL)
    {
        setlocale(LC_ALL, "Russian");
        int len = strlen(string);
        for (int i = 0; i < len; i++)
        {
            dest[i] = tolower(string[i]);
        }
        dest[len] = '\0';
    }
    else
    {
        dest[0] = '\0';
    }
    cell *addr = NULL;
    amx_GetAddr(amx, params[1], &addr);
    amx_SetString(addr, dest, 0, 0, 256);
    return 1;
}
MansMI тем не менее спасибо за попытку помочь.
0
Заблокирован
13.02.2017, 03:30 8
урус, шайтан язык, tolower не занимается
0
13.02.2017, 03:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2017, 03:30
Помогаю со студенческими работами здесь

Проблема с регистром
Здравствуйте. Имеется текстовый столбец где значения хранятся большими буквами или маленькими...

Косяк с регистром
Добрый день, есть документ с ТЧ, и на форме поле - оплатить долг. При движении документа, долг...

Работа с регистром сведений
И снова доброго времени суток! Всплыл такой вопрос... Есть документ ПриёмНаРаботу, у него...

Задача с регистром букв в Си
Задание Ввести с клавиатуры предложение. Произвести преобразование из верхнего в нижний реестр.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru