一、cctype头文件中的函数
isalnum ( c ) //当c是字母或数字时为真
isalpha ( c ) //当c是字母时为真
iscntrl ( c ) //当c是控制字符时为真
isdigit ( c ) //当c是数字时为真
isgraph ( c ) //当c不是空格但可打印时为真
islower ( c ) //当c是小写字母时为真
isprint ( c ) //当c可打印字符时为(即是空格或c具有可视形式)
ispunct ( c ) //当c是标点符号时为真
(即c不是控制字符、数字、字母、可打印空白中的一种)
isspace ( c ) //当c是空白时为真(即c是空格、横向制表符、
纵向制表符、回车符、换行符、进纸符中的种)
isupper ( c ) //当c是大写字母时为真
isxdigit ( c ) //当c是十六进制数字时为真
tolower ( c ) //如果c是大写字母,输出对应的小写字母:否则原样输出c
toupper ( c ) //如果c是小写字母,输出对应的大写字母:否则原样输出c
建议:使用C++版本的c标准库头文件ctype.h
二、基于范围的for语句
处理每一个字符
C++11提供了一种语句:范围for(range for)语句。
for(declaration : expression){
statement
}
其中,expression部分是一个对象,用于表示一个序列。declaration 部分负责定义一个变量,该变量将别用于访问序列中的基本元素。每次迭代,declaration 部分的变量会被初始化为 expression 部分的下一个元素值。
string str("some string");
for(auto c : str)
cout << c <<endl;
在此例中,通过使用auto关键字,让编译器来决定变量c的类型,这里c的类型是char。每次迭代,str的下一代字符被拷贝给c,然后在输出;
改变字符串中的字符
如果想改变string对象中字符的值,就需要把循环变量定义为引用类型。
string s("hello world");
for(auto &c : s)
c = toupper(c); //c是引用,所以会改变s中的字符
cout << s << endl;
只处理一部分字符
访问string对象单个元素的方式有两种,一种是迭代器,一种是下标;
迭代器会《C++ 迭代器》中详细介绍;
下标:下表运算符[ ],接受的参数为string::size_type 类型的值,参数是访问字符的位置,返回值是访问字符的引用,下标从0算起到s.size()结束(不包括s.size())。
string s =("some string");
for ( decltype ( s.size( ) ) index = 0;index !=s.size() && !isspace( s [index] );++index)
s[index] = toupper(s[index]);
输出结果为SOME string
这里我们使用decltype关键字声明index为s.size()函数返回值得类型也可以使用string::size_type来定义