串(String)是由 n(n>=0) 个字符组成的有限序列,又名字符串。通常记为 s = “a0a1a2…an-1”,其中 ai 是串中的字符,n 是串的字符个数,也是串的长度,它不包括串结束符 ‘\0’,长度为 0 的串称为空串。
串空是任意串的子串;任一串是它自身的字串。除它本身外,一个串的其他子串都是他的真子串。
C++ 有关字符串的库函数名称为 # include<string>
初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| string s; s = "12345"; string ss[5]; string s1("123"); string s2(s1); string s3=s2; string s4(5,'a');
char cs[]="12345"; string s5(cs,3); string s6="0123456"; string s7(s6,2); string s8(s6,2,4); string s9(s6,2,10);
cout<<s,s1...s9<<endl; 12345 123 123 123 aaaaa 123 0123456 23456 2345 23456
|
串处理
substr 操作
1 2 3 4 5
| string s = "0123456";
string s1 = s.substr(1,5);
string s2 = s.substr(4);
|
insert 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| string str = "0123456789"; string str1 = "abcd"; string str2 = "ABCDEFGHIJKLMN"; string::iterator it;
str.insert(6,str1);
str.insert(6,str2,3,4);
str.insert(10,"must be string",8);
str.insert(10,"string ");
str.insert(10,2,':');
it = str.insert(str.begin()+6,'-');
str.insert (str.end(),3,'.');
str.insert (it+1,str2.begin(),str2.begin()+3);
|
erase 操作
1 2 3 4 5 6 7 8 9
| string str = "0123456789";
str.erase(3,2);
str.erase(str.begin()+3);
str.erase(str.begin()+3, str.end()-1);
|
append 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| string str = "0"; string str1 = "12345"; string str2 = "abcdefg";
str.append(str1);
str.append(str2,4,2);
str.append("string",2);
str.append("haha");
str.append(3,'.');
str.append(str2.begin()+2,str2.end()-2);
str += "add";
|
replace 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| string str = "012345678"; string str1 = "12345"; string str2 = "abcd";
str.replace(4,3,str1);
str.replace(3,5,str2,1,2);
str.replace(3,4,"string");
str.replace(3,5,"sample",4);
str.replace(6,2,3,'!');
str.replace(str.begin()+3,str.end()-1,str1); str.replace(str.begin()+3,str.end()-4,str2.begin(),str2.end()-1); str.replace(str.begin()+3,str.begin()+5,"it-str"); str.replace(str.begin()+4,str.begin()+8,"sample",3); str.replace(str.begin()+1,str.end()-4,1,'.');
|
assign 操作
assign 操作在一起列容器当中都存在,比如 vector 等等。是一个很基本的操作函数,string 使用 assign 可以灵活的对其进行赋值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| string str; string str1 = "01234567";
str.assign(str1);
str.assign(str1,4,3);
str.assign("c-string");
str.assign(5,'*');
str.assign(str1.begin()+1,str1.end()-2);
|
串搜索
find 和 rfind 用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
string str1 = "I will find you and love you."; string str2 = "you"; size_t ff_index; size_t lf_index;
ff_index = str1.find(str2); ff_index = str1.find("will"); lf_index = str1.rfind(str2); lf_index = str1.rfind("will");
ff_index = str1.find("you are cute",13,3); lf_index = str1.rfind("you are cute",30,4);
ff_index = str1.find('f'); lf_index = str1.rfind('o');
|
find….of 用法
1 2 3 4 5 6 7 8 9 10
|
string str("software string find is hard."); size_t ffo,flo,ffno,flno; ffo = str.find_first_of("aeiou"); flo = str.find_last_of("aeiou"); ffno = str.find_first_not_of("aeiou"); flno = str.find_last_not_of("aeiou");
|
compare 用法
如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1。string 重载了运算符,可以直接用 >、< 和 ==来进行比较。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| string s1="123",s2="123"; int cmp = s1.compare(s2); s1 = "223"; s2 = "1234"; cmp = s1.compare(s2); s1 = "012345"; s2 = "12345"; cmp = s1.compare(s2);
cmp = s1.compare(1,5,s2);
cmp = s1.compare(2,3,s2,2,3);
|