- 数据结构-串
对于数据结构串,可以有一个简单的定义
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN];
- string类
(1) 定义 & 初始化 string 对象
string str1; // (1)定义string对象
string str2(str1); // (2)str2 是 str1的副本
string str3 = str2; // (3) 等价于str(str) 副本
string str4("1234"); // (4)副本,末尾添加/0 空字符
string str5 = "12345"; // (5)副本 等价
int length = 5;
string str6(length, 'a'); //(6)把str6初始化为由length个a组成的连续字符串
(2)string对象的基本操作
os << str1; // 输出流
is >> str2; // 输入流
getline(is, str3); // 从is中输入一行返回给str3,返回is
str4[1]; //返回第1个字符的引用,从0开始计数
str4 + str5; // 返回str4和str5拼接的结果
str6 = str5; //副本
str6 == str5; //大小写敏感
str6 != str5;
关于STL容器,string使用
(1) string 类重载了 > < = == <= >= != 等操作符
利用字符在字典序中的顺序进行比较,并且对大小写敏感
(2)返回字符的长度,length()/size()几乎相同
时间复杂度O(1)
(3)插入 insert()
insert的用法有两种,下面直接上代码
#include<iostream>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
int main()
{
string str1 = "123456"; //待插入节点
string str3 = "123456"; //待插入节点
string str2 = "123"; //
str1.insert(6, str2);
cout << str1 << endl;
string::iterator it=str2.begin();
str3.insert(str1.begin(), it, it + 1); // 可以是下标,也开始迭代器str1.begin()
cout << str3 << endl;
system("pause");
return 0;
}
输出:
(4)删除 erase()
-
删除单个元素;
string::iterator it1 = str2.begin();
str1.erase(1);
str1.erase(it1); -
删除一个区间(两种方法)
-
str3.erase(1, 2);
-
string::iterator it2 = str2.begin();
string::iterator it3 = str2.begin();
str2.erase(it2, it3);
string内还有一个清空操作: str.clear() 时间复杂度为O(1)
(5)查找相关
-
substr(pos,len) // 返回从pos开始的长度为len的字符串 时间复杂度为O(len)
-
find 用法两种
- str.find(str1)
- str.find(str2,pos)
时间复杂度为O(n*m)
- 代替replace()
to_string // 非常重要的函数
参数value : 一个数值的转换
返回值:一个字符串保持转换后的值
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
int n = 10021312;
double d = 123.2343;
string str1 = to_string(n);
string str2 = to_string(d);
cout << str1 << " " << str2 << endl;
system("pause");
return 0;
}
使用实例代码:
#include<iostream>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
int main()
{
char str1[] = "hello C string!";
char* str2 = str1;
char str3 = 'a';
char str4 = 97; // 对应的ASCII码值
char str5 = 'abc';
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
cout << str5 << endl;
string str6 = "hello C++ string!";
string str7 = "string!";
cout << str6.find(str7) << endl; //返回第一次出现的位置
cout << str6.substr(1, 6) << endl;
string str8 = "today is really bad!";
cout << str8 << endl;
str8.erase(str8.begin() + 4);
cout << str8 << endl;
string str9 = "oh,no yerongrong";
for (size_t i = 0; i < str9.length(); i++)
{
cout << str9[i] << endl;
}
string str;
cin >> str;
cout << str;
string::iterator begin = str.begin();
string::iterator end = str.end();
cout << end - begin << endl;
//高级操作:字符串拼接
string s1 = "NCU";
string s2 = "is good school!";
cout << s1 << endl << s2 << endl;
string s3 = s1 + s2;
s1 += s2;
cout << s3 << endl << s1 << endl;
string st = "123";
if (st.length() != st.size()) {
cout << "error !!!!!" << endl;
}
else {
cout << "length==size" << endl;
}
//string 同样可以比较大小
string st1 = "aaa", st2 = "aab", st3 = "aa";
if (str1 < str) {
cout << "aaa<aab" << endl;
}
else {
cout << "aaa>aab" << endl;
}
// .....
system("pause");
return 0;
}
需要注意:对于string上的操作区间一般都是左闭右开区间