Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 17

Непонятны разные функции библиотеки cctype

12.07.2018, 16:06. Показов 2060. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код
Кликните здесь для просмотра всего текста
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <string>
#include <cctype>
 
void strcount(const std::string & str);
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    string input;
    cout << "Enter a line:\n";
    getline(cin, input);
    while(input != "")
    {
        strcount(input);
        cout << "Enter next line (empty line to quit): \n";
        getline(cin, input);
    }
    cout << "Bye\n";
    return 0;
}
void strcount(const std::string & str)
{
    using std::cout;
    static int total = 0;
    /*int blank = 0;
    for (int i = 0; i < str.size(); i++)                
        if (std::isblank(str[i]))
            blank++;
    int characters = str.size() - blank;*/
    //error: no matching function for call to 'isblank(const value_type&)'|
    //note: candidate: template<class _CharT> bool std::isblank(_CharT, const std::locale&)|
    //note:   template argument deduction/substitution failed:|
    //note:   candidate expects 2 arguments, 1 provided|
    int characters = 0;
    for(int i = 0; i < str.size(); i++)
        if (isgraph(str[i]))
            characters++;*/
    total += characters;
    cout << "\"" << str << "\" contains ";
    cout << characters << " characters.\n";
    cout << total << " characters total.\n";
}

Задача была считать и выводить количество символов без пробелов. Интересно почему, во-первых, для isgraph не требуется использовать std:: , а для isblank требуется. И во вторых почему код заключенный в комментарии не работает? Подходы противоположные, но работает только один. Ошибка тоже в комментариях. Спасибо заранее
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2018, 16:06
Ответы с готовыми решениями:

Функции <cctype>
Подскажите никак не пойму почему break в цикле не срабатывает (( Нужно вводить числовые значения в массив , либо пока он не заполниться...

Аналог функции isalpha() (<cctype>)
Здравствуйте) Я так понял, функция isalpha() не работает с русскими буквами(?), пришлось написать свою версию для работы с русскими...

Написать программу с использованием функции cctype
Программа, которая читает клавиатурный ввод до символа @ и повторяет его, за исключением десятичных цифр, преобразуя каждую букву...

8
Заблокирован
12.07.2018, 16:12
на стр.40 все нормально?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 17
12.07.2018, 16:37  [ТС]
Цитата Сообщение от Biger18 Посмотреть сообщение
на стр.40 все нормально?
Ой, менял комментарии не заметил. Да, там не должно быть */
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
12.07.2018, 17:43
Цитата Сообщение от HasTig Посмотреть сообщение
Интересно почему, во-первых, для isgraph не требуется использовать std:: , а для isblank требуется.
isgraph(int) используется как правило без указания пространства имен.
isblank(int) используется как правило без указания пространства имен.
std::isblank(charT c, const locale& loc) используется с указанием пространства имен std.

Так как вы передаете в isblank один аргумент, то и нужно использовать вариант без std.

Цитата Сообщение от HasTig Посмотреть сообщение
И во вторых почему код заключенный в комментарии не работает?
У меня без std компилируется успешно после удаления 37й строки и конца 40й.
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 17
12.07.2018, 18:05  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
У меня без std компилируется успешно после удаления 37й строки и конца 40й.
Если я делаю без std получаю ошибку
C++
1
2
3
4
5
6
7
8
9
int blank = 0;
for (int i = 0; i < str.size(); i++)
    if (isblank(str[i]))
        blank++;
int characters = str.size() - blank;
/* Build: Debug in 9.2 (compiler: GNU GCC Compiler) ===|
error: 'isblank' was not declared in this scope|
note: suggested alternative:|
note:   'std::isblank'|*/
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
12.07.2018, 18:38
HasTig, ничего не приходит в голову, у меня на VS2017 компилируется.
Тут написано вполне четко: http://www.cplusplus.com/reference/cctype/isblank/
Скиньте полный код программы, при котором возникает эта ошибка, может еще что то цепляется.
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 17
12.07.2018, 18:50  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Скиньте полный код программы, при котором возникает эта ошибка, может еще что то цепляется.
Вот
Кликните здесь для просмотра всего текста
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
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <string>
#include <cctype>
 
void strcount(const std::string & str);
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    string input;
    cout << "Enter a line:\n";
    getline(cin, input);
    while(input != "")
    {
        strcount(input);
        cout << "Enter next line (empty line to quit): \n";
        getline(cin, input);
    }
    cout << "Bye\n";
    return 0;
}
void strcount(const std::string & str)
{
    using std::cout;
    static int total = 0;
    int blank = 0;
    for (int i = 0; i < str.size(); i++)
        if (isblank(str[i]))
            blank++;
    int characters = str.size() - blank;
    total += characters;
    cout << "\"" << str << "\" contains ";
    cout << characters << " characters.\n";
    cout << total << " characters total.\n";
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
12.07.2018, 19:07
HasTig, могу только предположить, что у вас что то случилось с заголовочным файлом ctype.h (который подключает cctype), так как у меня все компилируется. Может быть стоит попробовать переустановить компилятор.

Добавлено через 9 минут
HasTig, с какими ключами компилируете? -ansi или -std=c90 не прописаны? Формат файла .cpp ?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 17
12.07.2018, 19:24  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
с какими ключами компилируете? -ansi или -std=c90 не прописаны? Формат файла .cpp ?
не знаю что такое ключи и с чем их едят, все по умолчанию. Формат да, *.cpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2018, 19:24
Помогаю со студенческими работами здесь

Непонятны функции
Или ссылку на нее..

Непонятны некоторые функции
Непонятны следующие функции, что они выполняют: (char)((int)('a')+j)) break; // что значит эта запись? char PROC(char s) // почему...

Разные функции используют разные системы координат. Почему так?
Друзья! К примеру, нарисовали мы окно. И используем функцию void glutMouseFunc(void (*func)(int button, int state, int x, int y); ...

Две разные библиотеки
Добрый день! Есть сайт, но котором используется jquery, а сейчас надо натянуть шаблон, в котором используется prototype.js. Они друг другу...

Регулярные выражения - разные библиотеки
Нужно применить регулярки к строкам. Гуглил и понял что есть несколько библиотек для этих целей. boost и pcre может быть еще какието. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru