string
对字符串常用的功能进行的封装,一般用cin、cout输出、输出
1、头文件
#include<string>
using namespace std;
//string.h和string是不一样的头文件
2、定义
string str;
//如果要初始化:string str="asdf";
3、访问
(1)下标访问,和普通以为数组一样………………str[i]
(2)通过迭代器访问…………………………………………………*it
定义it:string<int>::iterator it;
4、常用函数(见表格)
5、示例(见代码)
基本操作 | 复杂度 | |
---|---|---|
begin() | 返回指向第一个元素的迭代器 | O(1) |
end() | 返回最末元素的下一个位置的迭代器 | O(1) |
length()/size() | 返回string的长度,即存放的字符数(两个函数基本相同) | O(1) |
insert() | insert(pos,string),在pos号位置插入字符串string | O(N) |
insert(it,it2,it3),it是原字符串欲插入位置,it2、it3位待插入字符串的首位迭代器,用来表示串[it2,it3)将被插在it位置上 | O(N) | |
erase() | erase(it)删除迭代器为it的元素 | O(N) |
erase(frist,last),起始迭代器,和末尾迭代器的下一个地址,即删除[frist,last) | O(N) | |
erase(pos,len)从pos位置开始的len个字符 | O(N) | |
clear() | 清空 | O(1) |
substr() | substr(pos,len)返回从pos位置开始长度为len的子串 | O(len) |
find() | find(str2),当str2是str的子串时,返回其在str中第一次出现的位置,否则返回string::npos(两个字符串长度分别为n、m) | O(nm) |
find(str2,pos),从str的pos位开始匹配,返回值同上 |
其他 | |
---|---|
c_str() | 将string类型转化为字符数组输出 |
(operator+=) | string的加法,可以直接将两个string拼接起来 |
(compare operator ) | 两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序 |
string的构造:
#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
string str1="hello";
string str2("world");//构造方法
//构造方法还有很多,这里只介绍这几个
cout<<str1+str2<<endl;
cout<<str2+str1<<endl;
return 0;
}
string 比较大小(排序)
#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
vector<string>str;
string str1="hello";
string str2("world");
//字符串也可以进行大小比较
//按照字典序
str.push_back(str1);
str.push_back(str2);
string str3="aaaa";
cout<<(str1>str3)<<endl;
str.push_back(str3);
sort(str.begin(),str.end());//排序
cout<<"排序好的:"<<endl;
for(int i=0;i<str.size();i++)
cout<<i<<" "<<str[i]<<endl;
return 0;
}
string 长度判断以及遍历
#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
string str1="hello";
string str2("world");
string st="";
cout<<"st为空的吗?"<<st.empty()<<endl;//判断是否为空
cout<<"hello长度:"<<str1.length()<<endl;//返回string的长度
for(int i=0;i<str2.size();i++)
printf("%c\n",str2[i]);
return 0;
}
string 三个常用的函数
#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
string str1="hello";
string str2("world");
string s=str1+str2;
cout<<s<<endl;
cout<<s.find("low")<<endl;//返回找到的下标
//找不到返回string::npos
s.erase(0,3);//删除0开始长度为3的字符串
cout<<s<<endl;
cout<<s.substr(0,3)<<endl;//取0开始长度为3的子字符串
return 0;
}//还有好多不常用的函数,有兴趣自己看
unique
C++STL中的unique函数解析
unique函数属于STL中比较常用函数,它的功能是元素去重。即 “删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了。由于它“删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。
unique(it1,it2) | 对容器中[it1,it2)范围的元素进行去重,返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。 |
---|
示例:
#include<algorithm>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a[10];
printf("输入: ");//7 1 12 3 11 7 7 12
for(int i=1;i<=8;i++)
scanf("%d",&a[i]);
printf("不重复元素个数:%d\n",unique(a+1,a+8+1)-a-1);
printf("去重后的序列: ");
for(int i=1;i<=8;i++)
printf("%d ",a[i]);
cout<<endl;
cout<<endl;
/*---------------------------------------------*/
printf("输入: ");//7 1 12 3 11 7 7 12
for(int i=1;i<=8;i++)
scanf("%d",&a[i]);
sort(a+1,a+8+1);
printf("排序后: ");
for(int i=1;i<=8;i++)
printf("%d ",a[i]);
cout<<endl;
printf("不重复元素个数:%d\n",unique(a+1,a+8+1)-a-1);
printf("去重后的序列: ");
for(int i=1;i<=8;i++)
printf("%d ",a[i]);
cout<<endl;
return 0;
}
unique实现离散化:https://blog.csdn.net/qq_43803508/article/details/97624084