Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/189: Рейтинг темы: голосов - 189, средняя оценка - 4.79
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868

Функции tolower,islower,isupper

06.09.2009, 00:03. Показов 37716. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если кто знаком с функциями tolower,islower,isupper, дайте пожалуйста с каждой примитивный пример с маленьким коментом, как их использовать. Зараннее благодарю. ПО книге не понимаю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2009, 00:03
Ответы с готовыми решениями:

Out of range при использовании islower, isupper
Ошибка вылезает при использовании islower, isupper. В первом варианте кода использовал такой вариант: bool pre_oxide_1,pre_oxide_2; ...

Найти первые вхождения символов (функции strchr(), tolower())
В массиве строк , введенных пользователем , найти первые вхождения символов ' s ' и 'S' . Использовать функции strchr ( ) , tolower ( ) .

не работает функция isupper()
Доброе утро!У меня в программе не работает функция isupper(): for(int index = 0; index < strlen(str); index++) { ...

40
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
07.09.2009, 21:26
Студворк — интернет-сервис помощи студентам
Так ты не понял
g++ выдал warning на разные типы, чтобы его подавить я сделал преобразование типов.
А именно buf преобразовал к типу (char*)
1
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
07.09.2009, 23:34  [ТС]
Попробывал просто, не изменять свою программу, а заменил char на unsigned char
и всё заработало, странно, вроде ничего не корректировал, а оставил всё как есть, просто заменил тип.
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
18.11.2009, 03:19
Только я убедился работая на C что isupper возможно и islower не работает с русскими буквами!!
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 20:31
что то не работает toupper

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <ctype.h>
#include <iostream.h>
int main ()
{
    int i;
    char A[100];
    FILE *InputFile;
    InputFile = fopen ("input.txt", "r");
    if (InputFile == NULL) {
        printf ("Error open file\n");
        return 0;
    }
    for (i=0;;i++)
        A[i] = getc(InputFile);
    for (i=0;;i++)
        if (isspace(A[i] == 1)
            toupper (A[i+1]);
    for (i=0;i<50;i++)
        printf ("%c", A[i]);
    system ("PAUSE");
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
20.12.2009, 21:13
Цитата Сообщение от Bloomfield Посмотреть сообщение
C
1
2
for (i=0;;i++) 
    A[i] = getc(InputFile);
A[997] == EOF
A[998] == EOF
A[999] == EOF
...
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 21:48
чёт непонял
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.12.2009, 21:52
У тебя бесконечный цикл.
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 21:55
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <ctype.h>
//#include <iostream.h>
int main ()
{
    int i;
    char A[100];
    FILE *InputFile;
    InputFile = fopen ("C:\\input.txt", "r");
    /*if (InputFile == NULL) {
        printf ("Error open file\n");
        return 0;
    }*/
    for (i=0;i<100;i++)
        fscanf (InputFile, "%c", &A[i]);
    for (i=0;i<100;i++)
        if (isspace(A[i] == 1)
            A[i+1] = toupper( A[i+1] );
    for (i=0;i<50;i++)
        printf ("%c", A[i]);
    //system ("PAUSE");
}
всё равно что то ругается на [
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
20.12.2009, 22:19
Цитата Сообщение от Bloomfield Посмотреть сообщение
C
1
2
3
for (i=0;i<100;i++) 
    if (isspace(A[i] == 1) 
        A[i+1] = toupper( A[i+1] );
При i равном 99 "A[i+1]" - выход за границу массива

Цитата Сообщение от Bloomfield Посмотреть сообщение
C
1
2
for (i=0;i<100;i++) 
    fscanf (InputFile, "%c", &A[i]);
лучше как-то так переписать:
C
1
2
3
4
5
6
7
...
int c;
...
i = 0;
while ( ( c = fgetc(InputFile) ) != EOF && i < 100 )
    A[i++] = c;
...
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 05:51
всё равно, там где строка с toupper, пишет "error: syntax error before `[' token"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
21.12.2009, 09:03
Цитата Сообщение от Bloomfield Посмотреть сообщение
if (isspace(A[i] == 1)
то есть при A[i] неравном еденице isspace(0) получается...
C
1
2
3
for (i=0;i<100 - 1;i++)
                if (isspace(A[i])
                        A[i+1] = toupper( A[i+1] );
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 15:22
спасибо, теперь норм
только вот у меня toupper не работает с русскими буквами
в файле пишу русскими буквами,
в консоли ставлю шрифт Lucida Console, в коде пишу
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

и в консоли русский нормально отображается, но toupper не хочет работать
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
21.12.2009, 20:14
если кому то еще не понятна функция ТОЛОВЕР т вот код
C++
1
2
3
4
5
6
7
8
9
10
int drawTriangle(int lines,string a){
    for(int i = 0; i < a.length(); i++)
        a[i] = tolower(a[i]);
 
if(a=="isosx")  drawIsosXTriangle(lines);
if(a=="equil") drawEquilTriangle(lines);
if(a=="isos") drawIsosTriangle(lines);
if(a=="equilx") drawEquilXTriangle(lines);
return 0;
}
этот код рисует треугольники,если ввести equil то нарисует равносторонний треугольник,но если ввести Equil то не сработает,вот и код посмотрите
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
22.12.2009, 09:00
"в консоли ставлю шрифт Lucida Console, в коде пишу
SetConsoleCP(1251);
SetConsoleOutputCP(1251);"
Счастливый человек - видимо под gcc в Linux работаете.
У себя в Windows в C++ Builder да и в gcc 4.9.9. for Windows подобное заклинание
не приводит к правильному выводу русского шрифта.
(Справедливости ради и такие заклинания не помогают)
setlocale(LC_CTYPE,"Russian"); //?
setlocale(LC_ALL, ".OCP"); char c;
setlocale (LC_ALL,".1251");
Помогает только функция CharToOEM()
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
22.12.2009, 09:14
Цитата Сообщение от eugrita Посмотреть сообщение
"в консоли ставлю шрифт Lucida Console, в коде пишу
SetConsoleCP(1251);
SetConsoleOutputCP(1251);"
На всякий случай:
C
1
#include <windows.h>
точно не забываете?

Цитата Сообщение от eugrita Посмотреть сообщение
видимо под gcc в Linux работаете.
В Linux кодовая страница UTF-8 как правило. Можно, конечно, извратиться и 1251 приделать... А за одно и windows.h c SetConsoleCP() и SetConsoleOutputCP() самому написа'ть
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
22.12.2009, 09:35
Естественно не забываю, иначе компиляция не пройдет!
0
 Аватар для courteous_lion
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 19
09.03.2018, 17:24
А как проверить/изменить регистр данных типа string?Как обработать регистр string строки?

Добавлено через 1 час 48 минут
Сам задал,сам и ответил.Строки типа string нужно итерировать.Пройти итерацией,и по ходу итерации,менять регистр.
0
nd2
09.03.2018, 17:26

Не по теме:

Цитата Сообщение от courteous_lion Посмотреть сообщение
сам и ответил
Давно бы так...

0
6 / 6 / 2
Регистрация: 27.08.2017
Сообщений: 28
09.03.2018, 17:30
Цитата Сообщение от courteous_lion Посмотреть сообщение
Пройти итерацией,и по ходу итерации,менять регистр.
ß в ss (и обратно) превращаются?
0
 Аватар для courteous_lion
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 19
09.03.2018, 17:41
Вот таким способом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
void fn(std::string & s)
{
    for (int i = 0;i < s.size();i++)
    //итерируем строку по символам
 {
    char d;
    if (islower(s[i]))
    {
        d = toupper(s[i]);
        std::cout<<d;
    }
    else if (isupper(s[i]))
    {
        d = tolower(s[i]);
        std::cout<<d;
    }
  }
}
Но если не создавать отдельно символ "char d;"И не присваивать ему символ из строки,то тогда через- "std::cout<<tolower(s[i]);" будет выхлоп в терминал адрес символа.

Добавлено через 9 минут
ß в ss (и обратно) превращаются?
Не могу проверить,я на андроид платформе компилирую.На смартфоне решаю задачки из книги,вот и интересуюсь если что не так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2018, 17:41

Функция islower
#include &lt;iostream&gt; // для оператора cout #include &lt;cctype&gt; // для функции islower using namespace std; int main(){ char c; ...

Функция islower()
Подскажите пожалуйста пример работы этой функции , в программе Visual Studio 2012 C++ (Консольный проект). В учебнике написано нужно...

Функция islower()
Функция islower() возвращает 2 при любой вводимой строчной букве,так и должно быть?Я знаю,что функция выводит ненулевое значение,если буква...

Ошибка с islower
void func(char a) { char *b; for(int i = 0; i&lt;20; i++) { b=&amp;a; if(islower(a)) { cout&lt;&lt;(void*)b&lt;&lt;&quot;\n&quot;; ...

помогите с islower() и setfill()
1)Библиотечная функция islower() принимает в качестве аргумента один символ (букву) и возвращает ненулевое целое значение в том случае,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru