C++STL---String用法总结

简介:

头文件: #include<string>
一个专门存储和处理字符类型的容器, 具有强大的功能,拥有丰富的函数,可以让我们在进行字符串操作的时候提供很大的帮助。max_size()函数求出其最多可以有大概40亿的长度,string的用法其实非常多,没有重点也就失去了价值,这里只列举常用的~。

由于字符转常常伴随读入操作,因此在重点介绍一下读操作,比如数据包含空格…

1.定义:

string str, str1;
//定义空 string 容器

string str3 = "abcde";
//定义新容器, 将 “abcde” 作为初值

string str6{ 'a','b','c','d','e' };
//几乎不用

string str9 = str;
//这里注意我们是可以直接用等号的~很方便(string str8(str);这样也行

 string str5(5, '1');       
 //结果为"11111"

2.用string进行输入(字符有空格或tab)

2.1 cin

cin遇到空格,tab,回车键就结束读入。这个特点决定了cin不能输入带空格,tab ,enter的字符。那么需要解决这个问题我们引入了getline()这个函数。

2.2 getline()

getline()是一个面向行的函数。用来完成一行数据的读入,以enter或者指定数目的字符结束读入
用法一:
读入整行,遇到回车结束

string s;
getline(cin,s);

用法二:
cin.getline(字符数组名,接收长度,结束符)

char name[256];
cin.getline(name, 256,'*');

2.3 gets

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取。但换行符会被丢弃,然后在末尾添加’\0’字符。

2.4 getchar()

读入一个字符,以enter结束。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在缓冲区。它可以单独使用,不像上面的必须要读进一个变量中

2.5 scanf

用%[^\n]表示读到换行符停下

scanf("%[^\n]",&str);

3.string中操作符的使用

3.1 比较
string字符串支持常见的比较操作符(>,>=,<,<=,==,!=)比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符(ASCII码)的比较结果确定两个字符串的大小
比如: A > BAAAAAAAA 或者 ABAAAAA<AACCCCC

3.2 还可以用’+'实现字符串拼接:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	 string s2 = "abc";
     s2 += "def";
    cout<<"s2:"<<s2<<endl; // s2:abcdef
    
    string s3="abc";
    string s4="def";
    s3+=s4;
    cout<<"s3:"<<s3;      // s2=3:abcdef
	return 0;
}

结果:
在这里插入图片描述

4.常用函数:

4.1 string的插入函数:push_back() 和 insert()

push_back(char):尾插一个字符
insert(pos,char):在指定的位置pos前插入字符char,需要注意的是我们只能用迭代器来指定位置

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s1;

    // 尾插一个字符
    s1.push_back('a');
    s1.push_back('b');
    s1.push_back('c');
    cout<<"s1:"<<s1<<endl; // s1:abc

    // insert(pos,char):在指定的位置pos前插入字符char
    s1.insert(s1.begin()+1,'1');
    cout<<"s1:"<<s1<<endl; // s1:1abc
    
	return 0;
}

在这里插入图片描述

4.2 string的删除:erase()

我们还是用迭代器来删除,而不能直接使用下标

1. iterator erase(iterator p);//删除字符串中p所指的字符

2. iterator erase(iterator first, iterator last);//删除字符串中迭代器

区间[first,last)上所有字符

3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引

位置pos开始的len个字符

4.3 string的查找:find

string查找不仅能查找字符还能查找字符串,还能从指定位置开始找,从后往前找find->rfind,总之功能强大。

  • 下标都是从0开始的,没找到都返回-1
  • 在查找字符串的时候,成功返回字符串一个字符下标
#include <iostream>
#include <string>
using namespace std;

int main()
{
    // 1. 查找一个字符串
    cout << s.find("chicken") << endl;        // 结果是:9

    // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
    //从头开始0就可以不写
    cout << s.find('i',6) << endl;            // 结果是:11

    // 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
    cout << s.rfind("chicken") << endl;       // 结果是:9

    // 4. 从字符串的末尾开始查找字符
    cout << s.rfind('i') << endl;             // 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符
    
	return 0;
}

4.4 string的截取字符串:substr()

 s.substr(pos, len)

注意下标也是从0开始
返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
异常 : 若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则只拷贝到string的末尾

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s="sfsa";
	string a=s.substr(0,3);
	string b=s.substr();
	string c=s.substr(2,3);
	cout<<a<<endl;
	cout<<b<<endl;
	cout<<c<<endl;
	return 0;
}

在这里插入图片描述

4.4 其他

size()和length():返回string对象的字符个数,他们执行效果相同。

max_size():返回string对象最多包含的字符数,超出会抛出length_error异常

begin(); //begin()函数返回一个迭代器,指向字符串的第一个元素.

end() //end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置).

甚至还可以进行排序:sort(s.begin(),s.end()); ~~~~

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值