C++ primer三章二节标准库类型string

本文详细介绍了C++标准库中的string类型,包括其初始化、操作方法如读写、比较、拼接等,并展示了如何处理字符序列中的字符。通过示例代码演示了如何使用getline读取一行、使用for循环处理每个字符以及如何进行大小写转换。此外,还提到了一些字符处理函数,如isalnum和tolower等。
摘要由CSDN通过智能技术生成

标准库类型string

  • 标准库类型string表示可变长的字符序列,使用#include<string>引入头文件,string定义在命名空间std中。

定义和初始化string对象

  • 如何初始化类的对象是由类的本身决定的,类可以定义很多初始化对象的方式,但是这些方式之间必须有所不同,不同体现在初始值的数量、类型。
  • 常用的初始化的例子
string s1;           //空字符串
string s2(s1);       //将s1作为s2的初始值
string s2 = s1;      //和上面的一致

string s3("Value");  //给s3赋value值
string s3 = "value"; //和上面一致

string s4(n,'c');    //s4 = n个c

直接初始化和拷贝初始化

  • = 拷贝初始化,将等号右侧的初始值拷贝到新创建的对象中去
  • 不使用等号,则执行的是直接初始化

string对象上的操作

  • 一个类除了要规定初始化其对象的方式外,还要定义对象上所能执行的操作。
  • 类既可以定义通过函数名字调用的操作,还可以定义<<、+等各种运算符在此类的对象上的新的含义。
  1. os<<s   将s写到输出流os中,返回s
  2. is>>s    从is中读取字符串赋值给s,字符串以空白分割,返回is
  3. getline(is,s)  从is中读取一行赋值给s,返回is
  4. s.empty() s为空返回true。否则返回false
  5. s.size()   返回s中的字符的个数
  6. s[n]      返回s中第n个字符的引用,位置n从0开始计算
  7. s1+s2  返回字符串s1和s2拼接的效果
  8. s1 = s2  使用s2的副本代替s1中原来的字符
  9. s1 == s2  如果s1和s2的字符完全一致,则他们相等
  10. s1 != s2
  11. <、<=、>、>=  按照字典顺序比较大小,且大小写比较敏感

读写string对象

  • 读取操作的时候,string对象会自动忽略开头的空白(空格符、换行符、指标符),并从第一个真正的字符开始读起,直到遇见下一处的空白为止。例如输入“     Hello       ”,接收的却是“Hello”,输出的结果中没有空格。
  • 多个输入或者输出可以连写在一起。

读写未知数量的string对象

int main(int argc,char **argv){
    string word;
    while(cin >> word){
        cout << word << endl;
    }
    return 0;
}

使用getline读取一行

  • 保留输入的时候的空白符号,使用getline()替代先前的>>运算符号
  • getline只要一遇到换行符号就会结束读取操作并且返回结果,即使一开始输入的就是换行符号,那么返回的就是空字符串。
int main(int argc,char **argv){
    string word;
    while(getline(cin,word)){
        cout << word << endl;
    }
    return 0;
}

string的size操作

  • size函数返回的是一个string::size_type类型的值,这是一个无符号类型的数值,而且可以存放下任何string对象的大小。在C++11中允许使用auto或者decltype来判断变量的类型。
  • 如果表达式已经有了size()函数既不要使用int了,可以避免混用int和unsigned可能带来的问题。

比较string对象

  • ==和!=分别校验两个对象相等还是不相等。相等是指两个对象的长度和所蕴含的字符完全一致。
  • < <= >= > 和先前的认知是一致的,比较区分大小写,按照字典序来比
  • 如果两个字符一短一长,短的所有位数和长的先前位数是一致的,那么小的小于长的
  • 如果在某些位置上面元素不一致,以第一对相异字符比较结果作为整体比较结果。

两个string对象相加

  • 这个 + 符号和Java是一样的,默认是字符串的拼接
  • 如果将string对象、字符字面值和字符串字面值混在一起使用,需要保障每一个加法运算符 + 的两侧的运算符对象至少有一个是string。
    string s1 = "Hello";
    string s2 = "World";
    string s3 = s1 + "," + s2 + '\n';
    string s4 = s1 + ",";
    string s5 = "Hello" + "\n";//错误,两个运算对象都不是string
    string s6 = s1 + "," + "World";
    string s7 = "Hello " + "," + s2;//错误,不能把字面值直接相加

处理string对象中的字符

引入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标点符号为真
isspace(c)c空白为真
issupper(c)c大写字母为真
isxdigit(c)c是十六进制为真
tolower(c)若c大写,则转化为小写字母
toupper(c)若c小写,则转化为大写字母
  • C++在兼容C语言的库,去掉.h,在头文件的名字前面增加字母c即可。

使用for来处理每一个字符

  • 将每一个字符改成小写
int main(int argc,char **argv){
    string s = "HELLO WORLD!!!";

    for(auto &c : s) {  //对于s中的每一个字符,其中&表示引用
        c = tolower(c); //c是一个引用,因此赋值语句将会改变c的数值
    }
    cout << s << endl;
    return 0;
}
  •  处理特定位置的字符:1,使用下标;2,使用迭代器
  • 下标运算符号[] 接收的输入值是string::size_type类型的数值,这个参数表示的是访问字符的位置,返回的是该位置上字符的引用。字符对象的下标从0开始计算,最大的下标是s[s.size()-1]

补充知识

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值