Часто необходимо иметь дело с индивидуальными символами строки. Например, выяснить какой именно символ присутствует, является ли он пробелом и т.д.
Для этих целей в С++ определен заголовок 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;
}