Форум программистов, компьютерный форум CyberForum.ru

Функции tolower,islower,isupper - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.88
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
06.09.2009, 00:03     Функции tolower,islower,isupper #1
Если кто знаком с функциями tolower,islower,isupper, дайте пожалуйста с каждой примитивный пример с маленьким коментом, как их использовать. Зараннее благодарю. ПО книге не понимаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2009, 00:03     Функции tolower,islower,isupper
Посмотрите здесь:

не работает функция isupper() C++
C++ функция tolower()
Как реализовать tolower()? C++
помогите с islower() и setfill() C++
Ошибка с islower C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7224 / 3286 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
07.09.2009, 21:26     Функции tolower,islower,isupper #21
Так ты не понял
g++ выдал warning на разные типы, чтобы его подавить я сделал преобразование типов.
А именно buf преобразовал к типу (char*)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
07.09.2009, 23:34  [ТС]     Функции tolower,islower,isupper #22
Попробывал просто, не изменять свою программу, а заменил char на unsigned char
и всё заработало, странно, вроде ничего не корректировал, а оставил всё как есть, просто заменил тип.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
18.11.2009, 03:19     Функции tolower,islower,isupper #23
Только я убедился работая на C что isupper возможно и islower не работает с русскими буквами!!
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 20:31     Функции tolower,islower,isupper #24
что то не работает 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");
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.12.2009, 21:13     Функции tolower,islower,isupper #25
Цитата Сообщение от Bloomfield Посмотреть сообщение
C
1
2
for (i=0;;i++) 
    A[i] = getc(InputFile);
A[997] == EOF
A[998] == EOF
A[999] == EOF
...
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 21:48     Функции tolower,islower,isupper #26
чёт непонял
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
20.12.2009, 21:52     Функции tolower,islower,isupper #27
У тебя бесконечный цикл.
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
20.12.2009, 21:55     Функции tolower,islower,isupper #28
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");
}
всё равно что то ругается на [
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.12.2009, 22:19     Функции tolower,islower,isupper #29
Цитата Сообщение от 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;
...
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 05:51     Функции tolower,islower,isupper #30
всё равно, там где строка с toupper, пишет "error: syntax error before `[' token"
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.12.2009, 09:03     Функции tolower,islower,isupper #31
Цитата Сообщение от 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] );
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 15:22     Функции tolower,islower,isupper #32
спасибо, теперь норм
только вот у меня toupper не работает с русскими буквами
в файле пишу русскими буквами,
в консоли ставлю шрифт Lucida Console, в коде пишу
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

и в консоли русский нормально отображается, но toupper не хочет работать
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
21.12.2009, 20:14     Функции tolower,islower,isupper #33
если кому то еще не понятна функция ТОЛОВЕР т вот код
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 то не сработает,вот и код посмотрите
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
22.12.2009, 09:00     Функции tolower,islower,isupper #34
"в консоли ставлю шрифт 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()
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.12.2009, 09:14     Функции tolower,islower,isupper #35
Цитата Сообщение от eugrita Посмотреть сообщение
"в консоли ставлю шрифт Lucida Console, в коде пишу
SetConsoleCP(1251);
SetConsoleOutputCP(1251);"
На всякий случай:
C
1
#include <windows.h>
точно не забываете?

Цитата Сообщение от eugrita Посмотреть сообщение
видимо под gcc в Linux работаете.
В Linux кодовая страница UTF-8 как правило. Можно, конечно, извратиться и 1251 приделать... А за одно и windows.h c SetConsoleCP() и SetConsoleOutputCP() самому написа'ть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2009, 09:35     Функции tolower,islower,isupper
Еще ссылки по теме:

Функция islower() C++
Функция islower() C++
C++ Найти первые вхождения символов (функции strchr(), tolower())

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

Или воспользуйтесь поиском по форуму:
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
22.12.2009, 09:35     Функции tolower,islower,isupper #36
Естественно не забываю, иначе компиляция не пройдет!
Yandex
Объявления
22.12.2009, 09:35     Функции tolower,islower,isupper
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru