【黑马程序员】STL容器之string常用操作

string

string 基本概念

string本质

  • string是c++风格的字符串,而string本质上是一个类

string和char* 区别

  • char* 是一个指针
  • string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器

特点

  • string 内部封装了很多成员方法
  • string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

string构造函数

  • string的多种构造方式没有可比性,灵活使用即可

构造函数原型

  • 创建一个空字符串
string();   
  • 使用字符串s初始化
string(const char* s);  
  • 使用一个string对象初始化另一个string对象
string(const string& str);
  • 使用n个字符c初始化
string(int n, char c); 

代码示例

#include <iostream>
#include <string>

using namespace std;

// string构造函数
void test() {
    string s;
    cout << s << endl;
    string s1("aaaa");
    cout << s1 << endl;
    string s2(s1);
    cout << s2 << endl;
    string s3(5, 's');
    cout << s3 << endl;
}

int main() {
    test();
    return 0;
}

运行结果

在这里插入图片描述

string的赋值操作

string赋值的函数原型

  • char*类型字符串赋值给当前的字符串
string& operator=(const char* s); 
  • 把字符串s赋值给当前的字符串
string& operator=(const string &s); 
  • 字符赋值给当前的字符串
string& operator=(char c); 
  • 把字符串s赋值给当前的字符串
string& assign(const char* s); 
  • 把字符串s的前n个字符赋值给当前的字符串
string& assign(const char* s, int n);  
  • 把字符串s赋值给当前的字符串
string& assign(const string &s); 
  • 用n个字符c赋值给当前的字符串
string& assign(int n, char c);  

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string s;
    s = "asdfghjk";
    cout << "s: " << s << endl;
    string s1;
    s1 = s;
    cout << "s1: " << s1 << endl;
    string s2;
    s2 = 'a';
    cout << "s2: " << s2 << endl;
    string s3;
    s3.assign("asdfghjk");
    cout << "s3: " << s3 << endl;
    string s4;
    s4.assign("asdfghjk", 3);
    cout << "s4: " << s4 << endl;
    string s5;
    s5.assign(s3);
    cout << "s5: " << s5 << endl;
    string s6;
    s6.assign(5, 'f');
    cout << "s6: " << s6 << endl;
}

int main() {
    test();
    return 0;
}

结果示例

在这里插入图片描述

string字符串拼接

  • 实现在字符串末尾拼接字符串

函数原型

在这里插入图片描述

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str1 = "I";
    str1 += " am Tom.";
    cout << str1 << endl;
    str1 += " you are pig";
    cout << str1 << endl;
    str1 += str1;
    cout << str1 << endl;
    str1.append("xxx");
    cout << str1 << endl;
    string str2 = "hhhh";
    string str3 = "123456789";
    // 主叫从第i个字符之后的字符
    str2.append(str3, 5);
    cout << str2 << endl;
    // 主叫从第i个字符之后的n个 字符
    str2.append(str3, 5, 2);
    cout << str2 << endl;
}

int main() {
    test();
    return 0;
}

运行结果

在这里插入图片描述

string查找和替换

功能描述

  • 查找:查找指定字符串是否存在
  • 替换:在指定位置替换字符串

函数原型

在这里插入图片描述

字符串查找

  • find和rfind区别

    • find 从左往右找

    • rfind 从右往左找

  • 找到返回对应位置的下标,没找到返回-1

  • 代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str1 = "abcdefghdeaa";
    // find 从左往右找
    int pos = str1.find("de");
    if (pos == -1) {
        cout << "未找到" << endl;
    } else {
        cout << "找到了,pos = " << pos << endl;
    }
    // rfind 从右往左找
    pos = str1.rfind("de");
    if (pos == -1) {
        cout << "未找到" << endl;
    } else {
        cout << "找到了,pos = " << pos << endl;
    }
}

int main() {
    test();
    return 0;
}
  • 结果

在这里插入图片描述

字符串替换

  • replace在替换时,要制定从那个位置开始,多少个字符,替换的字符串
#include <iostream>
#include <string>

using namespace std;

void test() {
    string str = "asdfghjkl";
    str.replace(1, 4, "111111");
    cout << str << endl;
}

int main() {
    test();
    return 0;
}
  • 结果

在这里插入图片描述

字符串比较

  • compare 内部实现:逐字符一个一个按ascii码比较

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str1 = "hello";
    string str2 = "hello";
    string str3 = "hello1";
    // compare 内部实现:逐字符一个一个按ascii码比较
    if (str1.compare(str2) == 0) {
        cout << "str1 == str2" << endl;
    } else if (str1.compare(str2) > 0) {
        cout << "str1 > str2" << endl;
    } else {
        cout << "str1 < str2" << endl;
    }
}

int main() {
    test();
    return 0;
}

string字符存取

存取方式

  • 通过[]方式取字符:char& operator[](int n);

  • 通过at方法获取字符:char& at(int n);

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str = "sdsafs";
    cout << "通过[]方式访问:";
    for (int i = 0; i < str.size(); i++) {
        cout << str[i] << " ";
    }
    cout << endl;
    cout << "通过at方式访问:";
    for (int i = 0; i < str.size(); i++) {
        cout << str.at(i) << " ";
    }
    cout << endl;
    str[1] = 'a';
    cout << "通过[]方式访问修改后的字符:";
    for (int i = 0; i < str.size(); i++) {
        cout << str[i] << " ";
    }
    cout << endl;
    str.at(2) = 'c';
    cout << "通过at方式访问:";
    for (int i = 0; i < str.size(); i++) {
        cout << str.at(i) << " ";
    }
    cout << endl;
}


int main() {
    test();
    return 0;
}

运行结果

在这里插入图片描述

string插入和删除

  • 对string字符串进行插入和删除字符操作

函数原型

在这里插入图片描述

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str = "hello";
    // insert 在指定位置插入指定字符串
    str.insert(1, "12345");
    cout << str << endl;
    // delete 删除指定位置开始的n个字符
    str.erase(1, 5);
    cout << str << endl;
}

int main() {
    test();
    return 0;
}

运行结果

在这里插入图片描述

string字符串

  • 从字符串中获取想要的字符串

函数原型

  • 返回由pos开始的n个字符组成的字符串:string substr(int pos=0,int n=npos) const;

代码示例

#include <iostream>
#include <string>

using namespace std;

void test() {
    string str = "hello";
    string sub = str.substr(1, 3);
    cout << sub << endl;
}

int main() {
    test();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值