C++学习笔记(八):对字符的操作函数和范围for语句的使用

    前面一篇博客里介绍了string类和其详细使用,这里再说一下对单个字符的操作可以有哪些方法。

isalnum(c)c是字母或数字时为真
isalpha(c)c是字母时为真
iscntrl(c)c是控制字符时为真
isdigit(c)c是数字时为真
isgraph(c)c除空格之外的打印字符时为真
islower(c)c是小写 字母时为真
isprint(c)c是可打印字符(包括空格)时为真
ispunct(c)c是标点符号时为真
isspace(c)c是标准空白字符(空格、进纸、换行符、回车

、水平制表符或者垂直制表符)时为真

isupper(c)c是大写字母时为真
isxdigit(c)c是十六进制数(0~9,a~f,A~F)时为真
tolower(c)将c变为小写字母
toupper(c)将c变为大写字母

       从上表可以看出对于单个字符的判断及操作十分的全面,基本上是够我们做开发了。

       但是如果我想对string中的某个字符进行判断或操作该怎么办呢?比如检查某个string中是否含有空白,比如把其中的某个字母大小写转换等等。遇到此类问题,基本上用循环语句再加上逻辑判断语句是可以解决的,但是写出的代码会发现比较繁琐。因此,如果有更好的更简便的方法,那我们何乐而不为呢?下面就说下C++11标准新规定的一种基于范围的for语句:范围for语句。

       其语法表达形式如下:for(declaration  :  expression)

                                                      statement

       其中expression是一个对象,用于表示一个序列。declaration是定义一个变量,该变量将被用于访问序列中的基础元素。每次迭代,declaration的变量会被初始化为expression的下一个元素值

        用法举例如下:

int main(void)
{
    string s = "hello";
    for(auto c : s)
         cout <<  c <<endl;
    return 0;
}

      程序里通过auto来让编译器决定c的类型(关于auto在前面的博客里有介绍),这里c的类型是char。每次迭代,s的下一个字符都会被拷贝给c。最后程序输出结果为

h

e

l

l

o

这是用范围for语句来实现每个字符的逐次输出,那如果想将每个字符都变成大写,在按字符串的形式输出呢?

实现方法如下:

<span style="font-size:18px;">int main()
{
       string s("hello");
       for(auto &c : s)
          c = toupper(c);
       cout << s<<endl;
       return 0;
}</span>

程序运行结果如下:

HELLO

       这里定义的C是引用类型的(关于引用前面的博客有介绍),且引用的是s的下一个字符,故每次给c赋值,就相当于给s相对应的位置赋值。此处的c必须要是引用类型。如果不是,那么整个c = toupper(c)操作只能使c这个变量里的值由小写变成大写,根本上却没有改变原字符串的内容,因为c和s是独立的,只是c的值是有s赋予的而已。而用了引用,则相当于将c和s绑定了起来,那么对c的所有操作将会映射给s。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值