Кроме средств, определенных специально для языка С++, его библиотека содержит также библиотеку языка С. Имена заголовков языка С имеют формат имя.h. Версии этих же заголовков языка С++ имеют формат cимя, т.е. суффикс .h удален, а имени предшествует символ с, означающий, что этот заголовок принадлежит библиотеке С.
Следовательно, у заголовка cctype то же содержимое, что и у заголовка ctype.h, но в форме, соответствующей программе С++. В частности, имена, определенные в заголовках с имя, определены также в пространстве имен std, тогда как имена, определенные в заголовках .h, — нет.
Как правило, в программах на языке С++ используют заголовки версии cимя, а не имя.h. Таким образом, имена из стандартной библиотеки будут быстро найдены в пространстве имен std. Использование заголовка .h возлагает на программиста дополнительную заботу по отслеживанию, какие из библиотечных имен унаследованы от языка С, а какие принадлежат языку С++.
forЕсли необходимо сделать нечто с каждым символом в строке, то наилучшим подходом является использование оператора, введенного новым стандартом, — серийный оператор
for (range for). Этот оператор перебирает элементы данной ему последовательности и выполняет с каждым из них некую операцию. Его синтаксическая форма такова:
for (объявление : выражение)
оператор
где выражение — это объект типа, который представляет последовательность, а объявление определяет переменную, которая будет использована для доступа к элементам последовательности. На каждой итерации переменная в объявлении инициализируется значением следующего элемента в выражении.
Строка представляет собой последовательность символов, поэтому объект типа string можно использовать как выражение в серийном операторе for. Например, серийный оператор for можно использовать для вывода каждого символа строки в отдельной строке вывода.
string str("some string");
// вывести символы строки str по одному на строку
for (auto с : str) // для каждого символа в строке str
cout << с << endl; // вывести текущий символ и символ новой строки
Цикл for ассоциирует переменную с с переменной str типа string. Управляющая переменная цикла определяется тем же способом, что и любая другая переменная. В данном случае используется спецификатор auto (см. раздел 2.5.2), чтобы позволить компилятору самостоятельно определять тип переменной с, которым в данном случае будет тип char. На каждой итерации следующий символ строки str будет скопирован в переменную с. Таким образом, можно прочитать этот цикл так: "Для каждого символа с в строке str" сделать нечто. Под "нечто" в данном случае подразумевается вывод текущего символа, сопровождаемого символом новой строки.