- 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();