文章目录
- String常用的接口(黑框标记的是常用接口)
- 字符串的运算
- `c_str`:
- `data`:
- `get_allocator`:
- `find`:
- `substr`:
- `rfind`:
- `find_first_of`:
- `find_last_of`:
- `find_first_not_of`:
- `find_first_not_of`:
String常用的接口(黑框标记的是常用接口)
字符串的运算
c_str
:
返回一个指向数组的指针,该数组包含一个以空结尾的字符序列(即C-string),表示字符串对象的当前值
c_str()
方法返回一个指向字符数组的指针,这个数组包含了字符串的所有字符,并且是以空字符\0
结尾的。这个函数通常用来将std::string
的内容转换成C风格的字符串,以便于和那些期望C风格字符串的API进行交互。
因为C++和C语言是兼容的,那么在C++中就不妨会用到C的库或者文件,所以通过其转变内容风格,帮助我们更好的兼容C语言
void TestString1()
{string s1("hello world");string filename("test.cpp");FILE* fout = fopen(filename.c_str,"r");
}
data
:
返回一个指向数组的指针,该数组所包含的字符序列与构成字符串对象值的字符序列相同
data
和 c_str
的用法类似,只不过data
是早期版本
get_allocator
:
返回与该字符串关联的分配器对象的副本
而allocator是内存池的意思,内存池提高内存申请效率,但是这里我不详细说,而这里std::get_allocator
是 C++ 标准库中的一个函数,它用于获取一个容器的默认分配器。这个函数通常与容器模板一起使用,比如 std::vector
、std::list
等。默认分配器是一个对象,它定义了如何分配和释放内存。
find
:
在字符串中搜索由其参数指定的序列的第一次出现
2.size_t find (const char* s, size_t pos = 0) const;&&3.size_t find (const char* s, size_t pos, size_t n) const;
找到第一次出现的s的字符串
4.size_t find (char c, size_t pos = 0) const;
找到第一次出现的c字符
void TestString4()
{string url("https://www.baidu.com/");size_t goal = url.find("baidu");cout << goal << endl;
}
substr
:
返回一个新构造的字符串对象,其值初始化为此对象的子字符串的副本
void TestString2()
{string s1("text.cpp");size_t pos1 = s1.find('.');if (pos1 != string::npos){string suffix = s1.substr(pos1);cout << suffix << endl;}else{cout << "没有后缀" << endl;}
}
rfind
:
在字符串中搜索由其参数指定的序列的最后一次出现,和find
一样则是找第一个字符但是rfind
是从后往前找
void TestString3()
{string s1("text.c.tar.zip");size_t pos1 = s1.rfind('.');if (pos1 != string::npos){string suffix = s1.substr(pos1);cout << suffix << endl;}else{cout << "没有后缀" << endl;}
}
和上面类似找文件后缀,而在Linux下就会有这种情况,那么用rfind
正好
find_first_of
:
在字符串中搜索与参数中指定的任何字符匹配的第一个字符
find_last_of
:
在字符串中搜索与参数中指定的任何字符匹配的最后一个字符
find_first_not_of
:
在字符串中搜索第一个与参数中指定的任何字符不匹配的字符
find_first_not_of
:
在字符串中搜索与参数中指定的任何字符不匹配的最后一个字符
以find_first_not_of
为例实现一个找到字母“aeiou”将其替换成‘*’的程序
void TestString5()
{string str("When pos is specified, the search only includes characters at or before position pos, ignoring any possible occurrences after pos.");cout << str << endl;size_t found = str.find_first_not_of("aeiou");while (found != string::npos){str[found] = '*';found = str.find_first_not_of("aeiou",found+1);}cout << str << endl;
}