String operations 字符操作相关接口详解
目录
1.c_str
示例:
2.get_allocator
3.copy
4.substr
5.find
5.1示例1
5.2示例2
5.3示例3
摘要
1.c_str
c_str接口用于兼容c语言的习惯(字符串以/0来结尾,而c++则不需要/0),c的接口需要传字符串指针的时候,使用c_str()返回一个指向一个与对象字符串内容相同的但末尾额外添加/0以示结尾的符合c语言习惯的字符串的被const修饰的指针。
示例:
c语言中的文件操作接口,fopen
·
int main()
{string filename("10_8.cpp");FILE* fout = fopen(filename.c_str(), "r");if (fout) {cout << "打开成功" << endl;}return 0;
}
运行结果:
2.get_allocator
在stl库中,申请内存一般不直接通过new而是向内存池申请,get_allocator()可用于查找对象申请的空间对应的内存池。
string类本身是basic_string模板的实例化对象,模板中有对应的成员变量来分配内存池,有对应的缺省参数,日常使用不用我们关心。
其他容器也有类似成员变量,如list。
3.copy
这个接口需要我们传字符串,拷贝(覆盖原内容)之后默认是没有/0的,不常用。常用的是下边一个接口。
4.substr
与copy不同,substr直接返回一个被创建好的string类型的值。不需要传指针参数。
5.find
find查找的要求是被查找的字符串中的元素与查找列表中的元素一 一对应,完全一致才会返回pos。
find_first_of,只要被查找的字符串中的字符在查找列表中出现,就会被返回它的pos。
find_first_not_of,只要被查找的字符串中的字符没有在查找列表中出现,就会返回它的pos。
rfind find_last_of find_last_not_of 逻辑相同,只是从后往前查找。
5.1示例1
int main()
{string file("Test.tar.zip");size_t pos = file.rfind('.');//找文件的后缀,有多个 . 从后往前找if (pos !=string::npos){string suffix = file.substr(pos);cout << suffix << endl;}return 0;
}
运行结果:
5.2示例2
int main()
{//拆分网址string ur1 = "https://legacy.cplusplus.com/reference/string/string/";size_t i1 = ur1.find(':');if (i1 != string::npos){string protocl = ur1.substr(0, i1);cout << protocl << endl;size_t i2 = ur1.find('/', i1 + 3);if (i2 != string::npos){string domain = ur1.substr(i1 + 3, i2 - i1 - 3);cout << domain << endl;string uri = ur1.substr(i2 + 1);cout << uri << endl;}}return 0;
}
运行结果
5.3示例3
int main()
{//替换所查找的字符std::string str("Please, replace the vowels in this sentence by asterisks.");std::size_t found = str.find_first_not_of("aeiou");while (found != std::string::npos){str[found] = '*';found = str.find_first_not_of("aeiou", found + 1);}return 0;
}
运行结果
摘要
首先,c_str方法用于将C++字符串转换为C风格字符串(以'\0'结尾),便于与C语言接口(如fopen)兼容。其次,get_allocator涉及STL内存池机制,日常使用较少关注。copy方法用于字符串拷贝但不会自动添加'\0',而substr则更常用,能直接返回一个新的字符串对象。
博客重点解析了查找相关接口:find要求完全匹配子串,find_first_of查找首次出现在指定字符集中的字符,find_first_not_of则查找未出现在字符集中的字符,并提供了相应的反向查找版本(如rfind)。通过三个示例展示了实际应用:提取文件后缀、拆分URL协议与域名、替换字符串中的特定字符。这些内容突出了string类在字符串处理中的灵活性和实用性,适用于文件操作、文本解析等多种场景。