Часто необходимо иметь дело с индивидуальными символами строки. Например, выяснить какой именно символ присутствует, является ли он пробелом и т.д.
Для этих целей в С++ определен заголовок cctype, содержащий функции для работы с символами строки.
| Функции | Объяснение |
|---|---|
| isalnum(s) | Возвращает значение true, если s является буквой или цифрой |
| isalpha(s) | Возвращает значение true, если s - буква |
| iscntrl(s) | Возвращает значение true, если s - управляющий символ |
| isdigit(s) | Возвращает значение true, если s - цифра |
| isgraph(s) | Возвращает значение true, если s - не пробел, а печатаемый символ |
| islower(s) | Возвращает значение true, если s - символ в нижнем регистре |
| isprint(s) | Возвращает значение true, если s - печатаемый символ |
| ispunct(s) | Возвращает значение true, если s - знак пунктуации (т.е. символ, который не является управляющим символом, цифрой, буквой или печатаемым отступом) |
| isspace(s) | Возвращает значение true, если s - символ отступа (т.е. пробел, табуляция, вертикальная табуляция, возврат или прогон страницы) |
| isupper(s) | Возвращает значение true, если s - символ в верхнем регистре |
| isxdigit(s) | Возвращает значение true, если s - шестнадцатеричная цифра |
| tolower(s) | Если s - прописная буква, возвращает ее эквивалент в нижнем регистре, в противном случае возвращает символ неизменным |
| toupper(s) | Если s - строчная буква, возвращает ее эквивалент в верхнем регистре, в противном случае возвращает символ неизменным |
Поскольку С++ наследует язык С, эти же функции определены в заголовке ctype.h. Имена из cctype определены в пространстве имен std, а имена из ctype.h - нет. Поэтому лучше использовать библиотеки без суффикса h.
Напишем программу, подсчитывающую количество букв, цифр и пробелов в введенной строке.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
string line;
getline(cin , line);
decltype(line.size()) alphaCount = 0, digitCount = 0, spaceCount = 0;
if (!line.empty()) {
for (decltype(line.size()) i = 0; i < line.size(); i++) {
if (isalpha(line[i])) alphaCount++;
if (isdigit(line[i])) digitCount++;
if (isspace(line[i])) spaceCount++;
}
}
cout << "Количество:\nБукв: " << alphaCount
<< "\nЦифр: " << digitCount
<< "\nПробелов: " << spaceCount << endl;
return 0;
}