1,定义和构造初始化
b) string s(str) ; //拷贝构造函数 生成str的复制品
c) string s(str, stridx); //将字符串str内“始于位置stridx”的部分当作字符串的初值
d) string s(str, stridx, strlen) ; //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
e) string s(cstr); //将C字符串作为s的初值
f) string s(chars, chars_len); //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num, c); //生成一个字符串,包含num个c字符
h) string s(beg, end); //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s.~string() ; //销毁所有字符,释放内存
#include <iostream> #include <string> using namespace std; int main() { string str1 = "yesterday once more"; string str2("my heart go on"); string str3(str1, 6); // = day once more string str4(str1, 6, 3); // = day char ch_music[] = { "Roly-Poly" }; string str5 = ch_music; // = Roly-Poly string str6(ch_music); // = Roly-Poly string str7(ch_music, 4); // = Roly string str8(10, 'i'); // = iiiiiiii string str9(ch_music + 5, ch_music + 9); // = Poly str9.~string(); getchar(); return 0; }
assign() 的用法如下:
int main() { string str1 = "yesterday once more"; string str2("my heart go on"); string str3, str4; str3.assign(str2, 3, 7); // = heart g str4.assign(str2, 3, string::npos); // = heart go on (从3开始到结尾赋值给str4) str4.assign("gaint"); //= gaint str4.assign("nico", 500); // = nico 超出的长度会出现乱码 str4.assign(5, 'x'); // = xxxxx cout << str4 << endl; getchar(); return 0; }
int main() { string str1 = "yesterday once more"; string str2("my heart go on"); str2.swap(str1); cout << str1 << endl; // = my heart go on cout << str2 << endl; // = yesterday once more getchar(); return 0; }
int main() { string str1 = "yesterday once more"; string str2(" my heart go on"); str1 += str2; cout << str1 << endl; str1 += 'a'; cout << str1 << endl; str1.append(str2, 1, 3); cout << str1 << endl; str1.append(str2, 2, string::npos); cout << str1 << endl; str1.append("my name is zyx"); cout << str1 << endl; str1.append("nico", 500); cout << str1 << endl; str1.append(5, 'x'); cout << str1 << endl; str1.push_back('z'); //这个函数只能增加单个字符 cout << str1 << endl; getchar(); return 0; }
int main() { string str1 = "yesterday once more"; string str2(" my heart go on"); str1.erase(10); cout << str1 << endl; str1.erase(5, 4); cout << str1 << endl; getchar(); return 0; }
int main() { string str1 = "yesterday once more"; string str2(" my heart go on"); str1.replace(0, 2, "my name "); cout << str1 << endl; getchar(); return 0; }
string s(“abcd”); s.compare(“abcd”); //返回0 s.compare(“dcba”); //返回一个小于0的值 s.compare(“ab”); //返回大于0的值 s.compare(s); //相等 s.compare(0,2,s,2,2); //用s的”ab”和 s的”cd”进行比较小于零 s.compare(1,2,”bcx”,2); //用”bc”和”bc”比较。 (将s中从pos1开始的n1个字符与指针cp指向的地址开始的n2个字符进行比较)
(10)size(),length() //返回字符数量
现有的字符数,函数是size()和length(),他们等效。
(11) max_size() //返回字符的可能最大个数???
max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常
(12)empty() //判断字符串是否为空
Empty()用来检查字符串是否为空。
(13) capacity() //返回重新分配之前的字符容量
capacity()重新分配内存之前 string所能包含的最大字符数。
(14)reserve() //保留一定量内存以容纳一定数量的字符
这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
(15) [ ], at() //存取单一字符
可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用 at()的时候索引无效,会抛出out_of_range异常。
string str1 = "Iphone 5";
cout<<str1[2]<<endl; // = h
cout<<str1.at(4)<<endl; // = n
string stuff;
getline(cin,stuff); // 输入一行字符赋值给stuff
getline(cin,stuff,'!'); // 输入一行字符以“!”结束
cout<<stuff<<endl;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
(17) << //将谋值写入stream
(18) copy() //将某值赋值为一个C_string
c_str() //将内容以C_string返回
data() //将内容以字符数组形式返回
C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或字符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。
(19) substr() //返回某个子字符串
substr(),形式如下:
s.substr();//返回s的全部内容
s.substr(11);//从索引11往后的子串
s.substr(5,6);//从索引5开始6个字符
(20) 查找函数
查找函数很多,功能也很强大,包括了:
find()
rfind()
find_first_of()
find_last_of()
find_first_not_of()
find_last_not_of()
这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下:
最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较(如:if(s.find(“jia”)== string::npos))。
int main() { string str = "when i was young, i listen to radio."; string::size_type position; position = str.find("listen"); if (position != str.npos) //npos是个很大的数,如果没找到就会返回npos的值给position { cout<<"第一次出现的下标是:"<<position<<endl; } //从字符串下标9开始,查找字符串you,返回you 在str中的下标 position = str.find("you",9); cout<<"str.find("you",9")is:"<<position<<endl; //查找子串出现的所有位置 string substr = "i"; position = 0; int i = 1; while((position = str.find_first_of(substr,position)) != string::npos) { cout<<"position "<<i++<<position<<endl; position++; } //反向查找子串在str中最后出现的位置 string flag = "to"; position = str.rfind(flag); cout<<"str.rfind(flag):"<<position<<endl; getchar(); return 0; }
int main() { string str; str.push_back('Q'); str.push_back('A'); sort(str.begin(),str.end()); string::iterator itstr = str.begin(); for ( ; itstr != str.end(); itstr++) { cout<<*itstr; } //str.pop_back(); getchar(); return 0; //输出AQ }