C++入门小馆 :string

35d97dbb288a48c48a56d7396d8f1740.gif

目录

1. string 概念

2. string 常⻅操作

2.1 创建字符串

 2.2 string字符串的输⼊

2.2.1 cin的⽅式

2.2.2 getline 的⽅式

2.3 size()

2.4 迭代器(iterator)

 

2.4.1 begin() 和 end()

2.5 push_back()

2.6 字符串的+=和+运算

2.7 pop_back()

2.8 insert

2.9 find()


 

前面介绍了用字符数组来存储字符串。

char str[20] = "hello world";

今天我们来介绍另一个存储字符串的方式,保证你了解它之后,再也不想用那个难用的字符数组了。那就是string 类型。 

1. string 概念

string是c++中的分装类型,不同与内置类型,所以在使用string和它包含的各个函数时要使用<string>这个头文件。

string s1;
string s2 = "abc";
ba9cf5d4ace64141859e75bc1121a14e.png

注意string存储的字符串是没有'\0'的。 

2. string 常⻅操作

2.1 创建字符串

#include<string>
int main()
{
    string s1;
    string s2 = "hello";
    string s3("world");
    string s4 = s2;
    return 0;
}

s1和s2是常用的创建方法,s1是创建空字符串。

还可以像s4一样直接用s2赋值给s4。

string s1 = "haha";
string s2 = "hehe";
s2 = s1;

还可以对有值的字符串进行赋值。如果这是字符数组进行这种操作显然是不行的。

char arr1[10] ="hello";
char arr2[10] = "bit";
arr1 = arr2;

这里的arr1和arr2表示的是首元素地址,是常量,常量是不能进行赋值操作的。

 2.2 string字符串的输⼊

2.2.1 cin的⽅式

可以直接用cin的方式对string进行输入字符串操作。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string s;
     //输⼊
     cin >> s;
     //输出
     cout << s << endl;
 
     return 0;
}

当我们输入不带空格的字符串时,能得到我们想要的答案

f5db783a88194f0cb45d49873730cc1d.png

但一旦输入空格时,就会意外的截断。

53d6ca13f55a434397758bc7b828a788.png

如果我们想要解决这个问题,就要用到string里的函数getline了

2.2.2 getline 的⽅式

 
istream& getline (istream& is, string& str);
istream& getline (istream& is, string& str, char delim);

这是getline的原型,这里的istream是标准输入流,cin 是 istream 类型的标准输⼊流对象。

先来讲讲第一种吧!

getline(cin , string s);
先来讲讲这个的效果吧,从键盘上输入字符串并将其存储在s中,但它能存储空格。
 
 
7bf7f9e14bf2442ea468827327a59d6c.png

 第二种就不一样了,它可以指定结束的字符,当getline读取到那个字符时就是停止读取。是不是很神奇,让我们来实现一下吧。

aa554645c7ef4edb8ae999d2a8f12a7f.png

2.3 size()

 
size()函数包含在string中,是个成员函数,所以在使用时要用 . 点运算符,size也如它的英文一样,可以用来计算string类型的变量的字符个数。
可以凭借这个性质来实现遍历字符串
#incldue <iostream>
#include <string>
using namespace std;
int main()
{
     string s = "abcdef";
     int i = 0;
     for(i = 0; i < s.size(); i++)
     {
         cout << s[i] << " ";
     }
     return 0;
}
1

2.4 迭代器(iterator)

 
迭代器类似于指针,可以用来遍历容器(string)中的元素。
使用迭代器指向的元素时要使用(*)解引用操作符

 

2.4.1 begin() 和 end()

 
begin() :返回指向字符串第⼀个字符的迭代器,需要⼀个迭代器的变量来接收。
end() :返回指向字符串最后⼀个字符的下⼀个位置的迭代器(该位置不属于字符串)。
string 中 begin() 和 end() 返回的迭代器的类型是 string::iterator 。
可以这样遍历字符串
a11783fbfea942e084f818b1607301ff.png
 

2.5 push_back()

可以用来在字符串的末尾加入一个字符。
 
45bb7c0d5383409391cb87dace9b5399.png

2.6 字符串的+=和+运算

 
本来+=和+运算符只支持内置类型的,但string分装类型将+=和+等进行的运算符重载
就可以完美的替代刚刚讲的push_back类型了
比如
b4454049ee734621b1241486758a6a0c.png
 
这里不仅能+=直接的字符串还能直接+=string类型的字符串
还是在字符串前面插入
9a55bf45b59f4f3da3b900991a0c48e6.png
 
 
是不是完美的替代了push_back,这个不好用的函数了。

2.7 pop_back()

这个函数用于删除字符串的最后一个字符。
但注意不要删除空字符串哦!
3c40f7c3b4aa4a9aabefe93a993360b2.png

会出意外的哦! 

2.8 insert

如果我们需要在字符串中间的某个位置插⼊⼀个字符串,怎么办呢?这时候我们得掌握⼀个函数就是
insert
函数原型如下:
string& insert (size_t pos, const string& str); //pos 位置前⾯插⼊⼀个 string 字符串
string& insert (size_t pos, const char* s); //pos 位置前⾯插⼊⼀个 C ⻛格的字符串
string& insert (size_t pos, size_t n, char c); //pos 位置前⾯插⼊ n 个字符 c
这三种也没什么好讲的。看看就好了。
只需要注意pos是下标的位置就好了。
#include <iostream>
#include <string>
using namespace std;
int main()
{
 string s = "abcdefghi";
 string str = "xxx";
 cout << s << endl;
 s.insert(3, str);
 cout << s << endl;
 return 0;
}

2.9 find()

size_t find (const string& str, size_t pos = 0) const;
// 查找 string 类型的字符串 str ,默认是从头开始查找, pos 可以指定位置开始
size_t find (const char* s, size_t pos = 0) const;
// 查找 C ⻛格的字符串 s ,默认是从头开始查找, pos 可以指定位置开始
size_t find (const char* s, size_t pos, size_t n) const;
// 在字符串的 pos 这个位置开始查找 C ⻛格的字符串 s 中的前 n 个字符, //这里是s的前几个哟
size_t find (char c, size_t pos = 0) const;
// 查找字符 c ,默认是从头开始, pos 可以指定位置开始
 
注意返回的是size_t类型,如果未找到会返回size_t转换后的-1,就是个很大的数,string::npos。
 
2.10 substr()
substr() 函数⽤于截取字符串中指定位置指定⻓度的⼦串。函数原型如下:
string substr (size_t pos = 0, size_t len = npos) const;
//pos 的默认值是 0 ,也就是从下标为 0 的位置开始截取
//len 的默认值是 npos ,意思是⼀直截取到字符串的末尾
substr() :如果函数不传参数,就是从下标为0的位置开始截取,直到结尾,得到的是整个字符串;
substr(pos) :从指定下标 pos 位置开始截取⼦串,直到结尾;
substr(pos, len) :从指定下标 pos 位置开始截取⻓度为 len 的⼦串。

dd93e066298e44ef9d2615acafeec4bf.gif

注:本章很多内容抄录于比特蓝桥杯b站课程 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值