C++的string

348 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

STL的string表示可变长的字符序列。

头文件: #include

  • string直接支持字符串连接
  • string直接支持字符串的大小比较
  • string直接支持子串查找和提取
  • string直接支持字符串的插入和替换
  • string同时具备字符串数组的灵活性,可以通过 [ ]重载操作符来访问每个字符。

string 初始化

//string 常用的构造函数
string str;       //生成一个空字符串
string str ("ABC") //等价于 str="ABC"
string str ("ABC", strlen) // 将"ABC"存到str里,最多存储前strlen个字节
string s("ABC",stridx,strlen)  //将"ABC"的stridx位置,做为字符串开头,存到str里.且最多存储strlen个字节. 
string s(strlen,'A') //存储strlen个'A'到str里
  • 拷贝初始化

    • 如果使用等号=初始化一个变量,实际上执行的是拷贝初始化。
    • 编译器把等号右边的初始值拷贝到新建的对象中。
    • string s = "hello"; //拷贝初始化
  • 直接初始化

    • 不使用等号,则执行的是直接初始化。

string 对象的常用操作

str1.assign("ABC");        //清空string串,然后设置string串为"ABC"
 
str1.length();                //获取字符串长度
 
str1.size();           //获取字符串数量,等价于length()
 
str1.capacity();         //获取容量,容量包含了当前string里不必增加内存就能使用的字符数
 
str1.resize(10);          //表示设置当前string里的串大小,若设置大小大于当前串长度,则用字符\0来填充多余的.
​
str1.resize(10,char c);    //设置串大小,若设置大小大于当前串长度,则用字符c来填充多余的
 
str1.reserve(10);         //设置string里的串容量,不会填充数据.
​
str1.swap(str2);             //替换str1 和 str2 的字符串
 
str1.puch_back ('A');      //在str1末尾添加一个'A'字符,参数必须是字符形式
  
str1.append ("ABC");       //在str1末尾添加一个"ABC"字符串,参数必须是字符串形式
 
str1.insert (2,"ABC");      //在str1的下标为2的位置,插入"ABC"
 
str1.erase(2);             //删除下标为2的位置,比如: "ABCD" --> "AB"
 
str1.erase(2,1);             //从下标为2的位置删除1个,比如: "ABCD"  --> "ABD"
 
str1.clear();             //删除所有
 
str1.replace(2,4,"ABCD");//从下标为2的位置,替换4个字节,为"ABCD"
 
str1.empty();           //判断为空, 为空返回true

读取 string 对象

  • 使用标准库iostream读取string对象

    使用cin读取内容到string对象时,会自动忽略开头的空白,从第一个非空白字符串开始读起,直到遇上下一处空白为止。

    int main(){
        string s;
        cin >> s;
        cout << s << endl;
        return 0;
    }
    

    在以上程序中,运行后如果输入的是 " Hello World! " ,则最终s的值为 Hello

  • 使用getline按行读取

    如果想保理输入时的空白字符,则可以使用getline函数代替操作符<<。其语法如下:

    int main(){
        string line;
        while(getlien(cin, line)){ //按行读取
            cout << line << endl;
        }
        return 0;
    }