处理string对象中的基本操作

——南昌理工学院ACM集训队

Cctype头文件中的函数
使用以下函数需要添加头文件
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

处理每个字符?使用基于范围的for语句

string str(“some string”)
for(auto c;str) //对于str字符串中的每个字符
cout<<c<<endl; //输出当前字符

使用ccyupe头文件中包含的ispunct函数来统计string对象中标点符号的个数


string s(“hello world!!!);
decltype(s.size())punct_cnt=0;//统计s中标点符号的个数
for(auto c:s)
{
if(ispunct(c))
{
++punct_cnt;
}

}
cout<<punct_cnt<<”punctuation characters in”<<s<<endl;

在这里插入代码片

使用toupper函数来改变字符串中的字符(对换大小写)

{
int main()
{	string s("HEllo");
	for (auto& a : s)		//对于s中的每个字符			(auto为一种类型,int,double)
	{
		a = toupper(a);	//c是一个引用,因此赋值语句将改变s中字符的值
	}
	cout << s << endl;
}

输出结果:HELLO

特注:每次迭代时,变量c引用string对象s的下一个字符,赋值给c也就是在改变s中对应字符的值。因此在执行a=toupper(a)时,,实际上改变了c绑定字符的值。整个循环结束后,str中的所有字符都变成了大写

如何只处理一部分字符
两种方式:
1.运用下标运算符([])接收的是std::size_type类型的值(无符号数),整个参数表示访问的字符的位置;返回值是该位置上字符的引用

string对象的下标从0计起,s[0]是第一个字符,s[2]是第二个字符,s[s.size()-1]是最后一个字符

使用超出范围的下标将引发不可预知的结果(溢出),以此推断,使用下标范文空string也会引发不可预知的后果

在访问指定字符前记得一定要检查字符串是否为空

将字符串的首字符改写成大写形式

{
int main()
	{
	string s="hello";
	if (!s.empty())
	{
		s[0] = toupper(s[0]);
	}
	cout << "s[0]="<<s[0]<<" "<<s;
}

结果:s[0]=H Hello

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值