c++标准库中string类基本用法与易错点

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string; //不要在头文件中使用任何using指令,有可能导致名称冲突

int main()
{
    /*string类对象的声明方法*/
    string s1;//空string为空字符串
    string s2 = s1; //s2是s1的副本
    string _s2(s1);
    string s3 = "Hello world!";//s3是字符串字面值的副本
    string _s3("Hello world!");
    string s4(100,'c');//将字符c拷贝100次组成序列
    //使用等号初始化,为拷贝初始化,先创建字符串再将其拷贝进string对象内
    //()为直接初始化,如果类似s4,有多个初始值,则只能使用直接初始化

    /*string对象上的操作
     * 1.os << s 将s写到输出流中
     * 2.is >> s 从is中读取字符给s
     * 3.getline(is,s) 从is中读取一行给s
     * 4.s.empty() s为空返回ture,否则返回false
     * 5.s.size() 返回s中字符的个数
     * 6.s[n] 返回s中第n个字符的引用,n从0开始
     * 7.s1 + s2 字符串拼接
     * 8.s1 = s2 用s2的副本代替s1中的字符
     * 9.s1 == s2 字符串相等判断
     * 10.s1 != s2 等性判断,对大小写敏感
     * 11.< , <=, >= , > 利用字符在字典中的顺序进行比较,且对大小写敏感*/

    //读取string对象
    //使用iostream中的cin cout,特点在执行读取时会忽略输入流开头的空白换行制表符,从第一个字符开始读取,直到遇到空格结束读取
    //cin >> s1;
    //cout << s1 << endl;
    //读取未知数量的字符串
    /*while (cin >> s1)
        cout << s1 << endl;
    return 0;*/
    //如果希望读取进string对象的字符串保留其中间的空格,使用getline,参数为输入流和读取的内容,读取遇到换行符结束
    while (getline(cin, s1))
    {
        if (!s1.empty())
            cout << "字符串的的长度为"  << s1.size() << "内容为" << s1 <<endl; // size为string类成员函数,返回值包含空格
            //值得一提的是,s.size() 返回值类型为std::string size_type 并不是int 这是在string类中定义的
            auto a = s1.size(); // a的类型为std::string size_type,可以推断这是一个无符号类型且可以保存任意string的长度大小
            //切记混用 unsiged和int会发生意想不到的后果,避免出现类似s.size() < n(这个判断会永远为ture)这类型的条件判断
        if (s1 == "\0") //空字符串则跳出循环
            break;
    }

    /*string字符串拼接*/
    string s5 = "hello" + s1 + '\n'; //可以与字符串字面值进行拼接,也可以与字符字面值进行拼接,这本质是隐式类型转换
    //string s6 = "hello" + '\n' + s1; //非法,字符串字面值字符字面值不可以相加,他们都不是string类
    string s6 = "hello" + ('\n' + s1); //可行('\n' + s1)为string类对象

    cin.get();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值