STL(一)字符串string

引入

在C语言中,一般使用字符数组char str[]来存放字符串,但是操作麻烦,容易出错。
C++ 在 STL 中加入了 string 类型,对字符串常用的需求功能进行了封装,使得操作起来更加方便,且不必担心内存是否足够、字符串的长度等问题。

使用方法

定义与初始化

// string的定义
string str;

// string的初始化
string str = "abc"; // 多个小写字母

赋值

// string的定义
string str;

// string的赋值
str = "123"; // 多个数字字符

输入输出

普通读入

cin 读到空格或换行停止

string str;
cin >> str;  // 字符串读入
cout << str; // 字符串输出

整行读入

getline(),string 的整行输入,回车键之前的内容都会被记录进 string 里

string str;
getline(cin, str); // 整行读入
cout << str; // 字符串输出

整行读入 特殊情况

整行读入的特殊情况:

若题目的输入格式为:给出一个 n n n,表示之后有 n n n行,每行给定一个带空格的字符串。样例输入:
4
ab cd
hello world
hhh2
zpr zpr

如果直接按照以下代码:

int n;
string s;
cin >> n;
for(int i = 1; i <= n; i++){
    getline(cin, s);
}

会发现只能输入 3 3 3行字符串,原因是输入 4 4 4之后,此时按了一下换行,再输入 ab cd。
这一个换行会被第一个getline读进去,因为它是以换行作为分割的,第一个读入的东西是空白的。
正确的写法:

int n;
string s;
cin >> n;
getline(cin, s); // 这句话读入不到任何信息,只是为了吃掉 n 后面的换行 
for(int i = 1; i <= n; i++){
    getline(cin, s);
}

字符串拼接

string 字符串之间能通过 “+” 运算进行拼接

string s1 = "abc", s2 = "def";
string s = s1 + s2;
cout << s << endl;
cout << s.size() << endl; // 获取字符串长度

substr函数

截取字符串的一个子串,substr 包含两个参数,第一个参数是开始截取的下标:start,第二个参数是截取的长度 length(很多同学会认为第二个参数是截取的终点,这是错误的,请终重点记忆)。若不写第二个参数,则截取到字符串尾。
函数内部做了保护,如果长度超过了字符串尾,就到字符串尾为止。

string s = "hello";
s.substr(start, length);

insert函数

在字符串的中间插入一个字符串,t.insert(pos, s)
在字符串的 position 位置前面插入一个字符串 s。其中第一个参数是位置,第二个位置是字符串,表示要被插入的字符串。

string s = "hello", t = "world";
s.insert(2, t);
cout << s << endl;

find函数

查找字符串中是否有某一个子串。若能够找到,则返回这个子串起始位置的下标;若不能,则返回一个特别的标记 s.npos。

int main(){
    string s = "hello", t = "ll";
    if(s.find(t) != s.npos){
        cout << s.find(t);
    }else{
        cout << "t is not exist";
    }
}

reverse 函数

// 翻转字符串   s.begin(): 字符串首地址  s.end(): 字符串尾地址的后一位
string s;
cin >> s;
reverse(s.begin(), s.end())
cout << s << endl;

操作总结与扩展

  1. 以下标的形式访问字符串中的元素:s[i]
  2. 字符串拼接:+
  3. 判断字符串 s 是否为空:s.empty()
  4. 返回字符串 s 中字符个数:s.size()或s.length()
  5. 截取 s 字符串中从 i 开始,长度为 len 的子串:s.substr(i, len)
  6. 在字符串 s 的 pos 的位置前插入一个字符串t:s.insert(pos, t)
  7. 查找在字符串中第一个出现的字符串 t 的位置,查不到返回 4294967295(npos):s.find (t)
  8. 元素翻转:reverse(s.begin(), s.end())
  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值