C++ string对象的学习与整理

string对象操作

写在前面:突然有兴趣复习一下string对象的操作使用,因为个人感觉string的操作处理还是很重要而且实用的。想要用的时候问题就来了,经常忘记怎么用,自己就很生气也很吃亏。写一篇博客也算是加强一下基础,方便用的时候来看一下。
熟能生巧,反复熟悉一下string的特性,其中有些是C++11有的特性。

getline(is,s);  //从is中读取一行赋给s,返回is
s[n];       //返回s中第n个字符的引用,位置n从0开始
s.empty();  //返回布尔值判断字符串是否为空
s2 = s1;    //s2副本代替s1
s2 == s1;   //如果s1和s2字符完全一样,它们相等(包括大小写)
……

列举一些常用的操作,同时也是容易记混的,这样以后用的时候就能少看一点参考……

    string s1;  //空字符串初始化
    string s3 = "houa"; //s3是字面值的副本
    string s4(10, 'c'); //s4: cccccccccc
    string s5("value"); //s5是字面值的副本
    string s2(s1);  //s2是s1的副本

读写string对象

引入头文件string之后,就可以用iostream来对string对象进行读写的操作。
读写iostream也有好几种方法,列举一点常用的就行。

    string s;   //空的字符串
    cin >> s;   //遇到空白结束;
    cout << s << endl;

    cin >> s1 >> s2;    //读入2个字符串,空格为结束标志
    cout << s1 << s2 << endl;

初始化一个字符串s,对它进行读写的时候,使用cin来进行读取字符串。
这样做的话,遇到空格就会结束读取字符串。同样地,如果初始化2个字符串对象,分别读入s1和s2,很显然空格就是判断s1结束读入而开始s2读入的标志。这样输入“Hello World!”的时候,输出s就会得到结果 “Hello”;而s1、s2输出就能得到“HelloWorld!”。
简单的说,读进去的是一个词。

使用getline()函数就可以读入一整行的字符串,而不会遇到空格就结束,值得注意的是这里读入的最后一个换行符并不会存入到string对象中去;如果一开始就是空字符串,那么getline()就直接读入换行符,但不会存到string里面。
如前面提到过的getline(is, s)就是把is赋给s,这里使用cin读入字符串到line。因而输出的是一行。

    string line;
    getline(cin, line); //获取一行字符串,直到遇到换行符,读入换行符
    cout << line << endl;   //string对象不会存入换行符

按照上面的输入,这里就能得到输出“Hello World!”一整行字符串。


size和empty操作
size()和empty()也是很常用的对string对象的操作。

    //size & empty
    line.empty();   //判断字符串空,bool
    line.size();    //返回string对象的长度
    auto len = line.size();

字面值和string对象相加

string对象和字面值相加,字面值也会转换为string。但是值得注意的是字面值之间不能相加,这样是错误的。简单的记就是,”+”的两侧必须有一边是字符串,不能全是字面值。

    string str = s1 + ", " + s2;    //正确
    str = "Hello" + ", " + s2;  //错误,报错

处理每个字符

有时候也想处理string里面的每一个字符,使用范围for就能实现。

for(定义:对象)
    语句

一些小例子:

    //range for处理字符串
    for (auto c : str)
        cout << c << endl;
    for (auto &c : str)
        c = toupper(c);
    cout << str << endl;

可以获取str中的每一个元素,并打印出来,每行打印一个字符;也可以使用引用&c把字符串里面的元素全部转换为大写,引用可以修改目标值。

顺便贴出一些函数

    isalnum(s1[0]); //字母或数字为真
    isalpha(s1[0]); //字母时为真
    isdigit(s1[0]); //数字时为真
    islower(s1[0]); //小写字母时为真
    ispunct(s1[0]); //标点符号时为真
    toupper(s1[0]); //如果参数是小写字母,则转换为大写字母

再看了一遍还是感觉到颇有收获的,还是要继续学习一番。
参考书目《C++ Primer 5th》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值