处理string对象中的字符

标准库类型string表示可变长的字符序列,使用string类型必须包含string头文件,string定义在命名空间std中。
(1)定义和初始化string对象:

string s1;              //默认初始化s1是一个空串
string s2(s1);          //s2是s1的副本
string s3 = s1;         //等价于s3(s1),s3是s1的副本
string s4("value");     //s4是字面值"value"的副本(除了字面值最后的空字符)
string s5 = "value";    //等价于s5("value"),s5是字面值"value"的副本
string s6(n , 'c');     //吧s6初始化为连续的n个字符c组成的串

(2)string对象上的操作:

os<<s           //s写到输出流os中,返回os
is>>s           //is中读字符串赋给s,字符串以空白分隔,返回is
getline(is,s)   //从is中读取一行到s,返回is
s.empty()       //s为空返回true,否则返回false
s.size()        //返回s中字符的个数
s[n]            //返回s中第n个字符的引用,位置n从0开始计算
s1+s2           //返回s1和s2连接后的结果
s1=s2           //s2赋值给s1
s1==s2          //如果s1和s2中所含字符完全一样,则相等
s1!=s2          //否则不等(对字母大小写敏感)
<,<=,>,>=       //按照字符在字典中的顺序比较大小(对字母大小写敏感)

在cctype头文件中定义了一组标准库函数处理string对象中的字符:

isalnum(c)  //当c是字母或数字时为真
isalpha(c)  //当c是字母时为真
iscntrl(c)  //当c是控制字符时为真
isdigit(c)  //当c是数字时为真
isgraph(c)  //当c不是空格但可以打印时为真
islower(c)  //当c是小写字母时为真
isprint(c)  //当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

如果想处理string对象中的每个字符时,可以使用范围for(range for)语句。
语法形式是

for(dec : exp)
    statement

其中:
exp是一个对象,用于表示一个序列;
dec部分定义了一个变量,该变量用于访问exp序列中的基础元素(例如一个string对象中的字符)。
每次循环,将exp下一个元素的值赋给dec
举例说明:

//这里使用toupper函数将指定的string对象中的字符序列全部转化为大写形式
//并使用ispunct函数统计标点符号的个数
#include <iostream>
#include <string>

using namespace std;
int main()
{
    int a = 0;  //用于统计标点符号的个数
    string str("we are capital letters!!!");
    cout << "原语句:" <<str<< endl;
    for(auto &c : str)
    {
        if(ispunct(c)) a+=1;  //统计标点符号的个数
        c = toupper(c);  //将小写字母转化成大写字母
    }
    cout << "转化后的语句: " <<str<< endl;
    cout << "标点符号个数: " <<a<< endl;
    return 0;
}

运行结果:

这里需要注意的是,范围for语句是C++11新标准提供的语句,老版本的编译器会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值