C++ STL 第一部分-容器
STL的介绍
C++的STL分为六大部分
容器分为
String容器
例子1
std::string str1,str2,str3,str4;
str1.assign("abcd"); //给str1赋值abcd
str2.assign("abcd",3); //获取abcd中的3个,从0到2
str3.assign(str1); //获取str1
//注意str3()和str3.assign有区别
//str3.assign(str1); 是对现有 std::string 对象 str3 的修改,将其内容替换为 str1 的内容。
//string str3(str1); 是创建一个新的 std::string 对象 str3,并将其初始化为 str1 的内容。
str4.assign(4,'a'); //返回4个aaaa
std::cout<<str1<<'\n'<<str2<<'\n'<<str3<<'\n'<<str4<<std::endl;
/*
abcd
abc
abcd
aaaa
*/
const char* p="abcd";
std::string str5(p); //abcd c风格转string
const char* p2 = str5.c_str(); //string转Char
例子2
std::string str1;
std::cout<<str1.empty()<<" "<<str1.length()<<" "<<str1.size()<<std::endl;
// 1 0 0
str1="hello";
std::cout<<str1.empty()<<" "<<str1.length()<<" "<<str1.size()<<std::endl;
// 0 5 5
- empty函数返回一个bool,如果有值返回0,无值返回1
- length() 和 size() 的主要区别在于它们的语义和起源。length() 函数更常见于 C 风格的字符串处理,而 size() 函数则是 C++ 引入的,与容器类(如 std::vector、std::list 等)中的 size() 方法保持一致,使得在处理不同类型的集合时具有一致的接口。
例子3
std::string str1("hello");
cout<<str1.at(1)<<endl;;
cout<<str1[1];
//e
//e
for(char &c:str1){
cout<<c<<"---";
c=toupper(c);
//这个函数的作用是将一个小写字母转换为对应的大写字母。如果传递给它的字符不是小写字母,那么它通常返回该字符本身,不做任何改变。
}
- 这里at和[]基本上没有区别,但是at()里参数如果越出了数组范围,会直接报错,而[]是不会报错的,at更加安全
例子4
string str1("abc"),str2("abc");
const char *p="abc";
cout<<str1.compare(str2)<<endl;
cout<<str1.compare("abcd")<<endl;
cout<<str1.compare("ab")<<endl;
cout<<str1.compare(p)<<endl;
/*
0
-1
1
0
*/
总结来说,compare 函数返回 0 表示比较的两个字符串在字典序上是相等的。在这种情况下,所有比较都涉及相同的字符串 "abc",因此都返回 0。如果比较的两个字符串不相等,compare 函数会返回一个非零值,通常是根据两个字符串在字典序中的相对位置来决定的。如果第一个字符串在字典序上小于第二个字符串,compare 会返回一个负数;如果第一个字符串在字典序上大于第二个字符串,compare 会返回一个正数。
例子5
string str1("abc"),str2("abc");
str1.insert(0,"11");
cout<<str1<<endl;
str1.insert(3,str2);
cout<<str1 <<endl;
str1.erase(0,3); //从0开始删除3个字符
cout<<str1 <<endl;
string str3=str1.substr(0,2); //截取从0开始,2长度的字符串
cout<<str3 <<endl;
/*
输出
11abc
11aabcbc
abcbc
ab
*/
### 例子6
string str1="ab111111ab",str2="ab",str3="bc";
cout<<str1.find(str2)<<endl; //只有一个参数就默认从0开始查找
cout<<str1.find(str2,4)<<endl; // 默认从4开始查找
cout<<str1.find(str3)<<endl; // 默认从4开始查找
const char* p="abcd";
cout<<str1.find(p,0,2)<<endl; //表示C++从0开始寻找,这个char前两个在str1中的位置,第一个参数只能是char类型
/*
0
8
18446744073709551615
0
*/
在string的find中默认从0开始查找,如果没有找到子字符串,find 函数返回 std::string::npos
**std::string::npos**的值是 4294967295(对于 32 位无符号整数)或 18446744073709551615
string str1="ab111111ab",str2="zzz",str3="bc";
cout<<str1.replace(0,2,str2)<<endl;
//输出 zzz111111ab
* str1.replace(0, 2, str2) 调用 replace 函数来修改 str1。
* 第一个参数 0 是替换开始的位置索引。
* 第二个参数 2 是要替换的子字符串的长度。
* 第三个参数 str2 是用来替换的新字符串。
标签:std,string,STL,str1,C++,str3,字符串,cout
From: https://www.cnblogs.com/AndreaDO/p/18024641