length():返回string长度,size()有相同效果。
需要注意的是,string的length()操作并不会像C中的string.h中定义的strlen一样扫描整个字符串,理论性能更优,附strlen实现代码。#include <stdlib.h> size_t strlen( char *string ) //size_t stddef.h中定义的类型 等价于unsigned int { int length = 0; // 依次访问字符串的内容,计算字符数,直至遇到NUL终止符 while( *string++ != '\0' ) length += 1; return length; }同样需要注意,string作为类其长度已经以成员变量形式储存,由此并不需要‘\0’作为结束标志,即不需要判断字符串是否已经结束。实验中也可以看到,string并不以‘\0’结尾。
find(): 函数原型:
size_t find ( const string& str, size_t pos = 0 ) const; size_t find ( const char* s, size_t pos, size_t n ) const; size_t find ( const char* s, size_t pos = 0 ) const; size_t find ( char c, size_t pos = 0 ) const;参数说明:
pos:查找起始位置
n:待查找字符串的前n个字符
将返回索引首字母索引,与下文其他与find相关的区分开来。find_first_of(): 函数原型:
size_t find_first_of ( const string& str, size_t pos = 0 ) const; size_t find_first_of ( const char* s, size_t pos, size_t n ) const; size_t find_first_of ( const char* s, size_t pos = 0 ) const; size_t find_first_of ( char c, size_t pos = 0 ) const;参数表与find一致,但此函数查找时,只要str1含str2中任意一字符,就会返回str1中第一个命中str2中任意字符的字符索引。(即对顺次扫str1)
string str1("I am change"); string str2("caout"); int k = str1.find_first_of(str2); // k = 2 return 0;erase(): 函数原型:
sequence (1) string& erase (size_t pos = 0, size_t len = npos); character (2) iterator erase (iterator p); range (3) iterator erase (iterator first, iterator last);
注意:此方法既对字符串原地修改,也可以返回修改过后的string,后同。
pos:擦除起点索引
len: 擦除字符个数,缺省时只擦除pos位置一个字符。
还可以通过迭代器控制擦除范围,如s.erase(s.begin()+1,s.end()-1)。
- insert() : 函数原型:
string (1) string& insert (size_t pos, const string& str);
在pos位置插入str,str的第一个字符的新索引将会是pos。
append() :函数原型:
string (1) string& append (const string& str); substring (2) string& append (const string& str, size_t subpos, size_t sublen = npos); c-string (3) string& append (const char* s); buffer (4) string& append (const char* s, size_t n); fill (5) string& append (size_t n, char c); range (6) template <class InputIterator> string& append (InputIterator first, InputIterator last); initializer list(7) string& append (initializer_list<char> il);例程:
// appending to string #include <iostream> #include <string> int main () { std::string str; std::string str2="Writing "; std::string str3="print 10 and then 5 more"; // used in the same order as described above: str.append(str2); // "Writing " str.append(str3,6,3); // "10 " str.append("dots are cool",5); // "dots " str.append("here: "); // "here: " str.append(10u,'.'); // ".........." str.append(str3.begin()+8,str3.end()); // " and then 5 more" str.append<int>(5,0x2E); // "....." std::cout << str << '\n'; return 0; }数值类型转string利器:to_string():函数原型:
string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val);string转char[] data() :仅简略介绍用法:
string str="abc"; char *p=str.data();