博客主页:【夜泉_ly】
本文专栏:【C++】
欢迎点赞👍收藏⭐关注❤️
文章目录
- 💡前言
- 💡字符串操作
- 1.c_str 、data -重点⭐
- 1.1函数原型
- 1.2用法
- 2.copy
- 2.1函数原型
- 2.2用法
- 2.3注意事项
- 3.find、rfind -重点⭐
- 3.1函数原型
- 3.2用法
- 3.3注意事项
- 4.find_..._of
- 4.1功能简述
- 5.substr
- 5.1函数原型
- 5.2用法
- 6.compare
- 6.1简介
- 6.2返回值
💡前言
在这篇文章中,我将继续简单探讨 C++
中 string
的基本用法。写这篇文章的主要目的是帮助我巩固所学的知识,同时也便于未来的复习和参考。
如果你想大致的了解 string
的基本用法,也可以留下来看看。
对于那些希望深入学习更多细节的读者,可以去看看这个网站:cplusplus.com,以获取更全面的参考资料。
💡字符串操作
1.c_str 、data -重点⭐
string::data
与string::c_str
是同义词,返回值完全相同。
一般用c_str
1.1函数原型
const char* c_str() const;
1.2用法
- 返回C类型的字符串,可以和C语言的一些接口函数配合:
string filename = "test.cpp";
FILE* fout = fopen(filename.c_str(), "r");
- 这里和
string::operator<<
做一下对比,可以看出两者的区别:
void Test()
{string str("Hello");str += '\0';str += " World";cout << str << endl;cout << str.c_str() << endl;
}
Output:
Hello World
Hello
2.copy
2.1函数原型
size_t copy (char* s, size_t len, size_t pos = 0) const;
2.2用法
将string
类对象的内容拷贝到字符串。
string str("Hello World");
char* c = new char[str.size()+1];
str.copy(c, str.size());
c[str.size()] = '\0'; // 这里只能手动加\0
cout << c << endl;
Output:
Hello World
2.3注意事项
- 拷贝时不会在拷贝内容之后加’\0’
string str("666");
char c[10];
str.copy(c , str.size());
cout << c;
运行结果如下图:
- 字符数组不够长,行为未定义。
pos
大于size
,抛异常。
3.find、rfind -重点⭐
3.1函数原型
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;
size_t rfind (const string& str, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos, size_t n) const;
size_t rfind (char c, size_t pos = npos) const;
3.2用法
在字符串中查找指定内容。
其中 find
是正向查找,rfind
是反向查找。
find :
void Test()
{string str("Hello World!!!");size_t found = str.find(string("!!"));// 从头找,找 “!!” , 找到了返回对应下标cout << found << endl;found = str.find("!!", found + 2);// 在上次查找的下一个位置查找“!!”, 找不到返回string::npos, 即-1(整型最大值)cout << found << endl;found = str.find("!!!!!", 0, 3);// 从头开始找,找“!!!!!”的前3个,即“!!!”, 找到了返回对应下标cout << found << endl;found = str.find('!');// 从头开始找, 找字符‘!’, 找到了返回对应下标cout << found << endl;
}
Output :
11
4294967295
11
11
反向查找rfind
的用法与find
基本相似,不过需注意反向查找的pos
缺省值是npos
,即默认从尾部开始查找。
3.3注意事项
pos
过大 或者 n
过大,行为未定义。
vs上是直接返回string::npos
:
void Test()
{string str("666666");size_t found = str.find("666", -1);cout << found << endl;found = str.find("666", 0, -1);cout << found << endl;
}
Output:
4294967295
4294967295
4.find_…_of
这里共有四个函数:
find_first_of
find_last_of
find_first_not_of
find_last_not_of
其函数原型与find
、rfind
类似,可以类比使用。
4.1功能简述
函数 | 功能 |
---|---|
find_first_of | 返回字符串中第一个属于指定字符集合的下标。 |
find_last_of | 返回字符串中最后一个属于指定字符集合的下标。 |
find_first_not_of | 返回字符串中第一个不属于指定字符集合的下标。 |
find_last_not_of | 返回字符串中最后一个不属于指定字符集合的下标。 |
5.substr
5.1函数原型
string substr (size_t pos = 0, size_t len = npos) const;
5.2用法
从pos
位置开始,搞出一个长度为len
的字串。
截取 [pos,len) 位置的。
void Test()
{string str("Hello World");string str1 = str.substr();string str2 = str.substr(str.find('W'));string str3 = str.substr(0, str.find('W'));cout << "str1: " << str1 << endl;cout << "str2: " << str2 << endl;cout << "str3: " << str3 << endl;
}
Output:
str1: Hello World
str2: World
str3: Hello
6.compare
6.1简介
提供了多种方式进行字符串的比较:
这里面用的最多的感觉是第一个:
void Test()
{string str("Hello World");string str1 = str.substr();string str2 = str.substr(str.find('W'));string str3 = str.substr(0, str.find('W'));cout << str.compare(str1) << endl;cout << str.compare(str2) << endl;cout << str.compare(str3) << endl;
}
Output :
0
-1
1
6.2返回值
返回值 | 意义 |
---|---|
0 | 相等 |
<0 | 比较字符串中的第一个不匹配字符的值较小,或者所有比较的字符匹配但比较字符串较短。 |
>0 | 比较字符串中的第一个不匹配字符的值较大,或者所有比较的字符匹配但比较字符串较长。 |
希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!