变量申请
- string str; //定义了一个空字符串str
- string s1(str); //调用复制构造函数生成s1,s1为str的复制品
- string s2(str,6); //将str内,开始于位置6的部分当作s2的初值
- string s3(str,6,3); //将str内,开始于6且长度顶多为3的部分作为s3的初值
- string s4(cstr); //将C字符串作为s4的初值
- string s5(cstr,3); //将C字符串前3个字符作为字符串s5的初值。
- string s6(5,’A’); //生成一个字符串,包含5个’A’字符
- string s7(str.begin(),str.begin()+5); //区间str.begin()和str.begin()+5内的字符作为初值
输出结果:Hello worldworld wor abcde abc AAAAA Hello
获取特性的函数
- int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)
- int max_size()const; //返回string对象中可存放的最大字符串的长度
- int size()const; //返回当前字符串的大小
- int length()const; //返回当前字符串的长度
- bool empty()const; //当前字符串是否为空
- void resize(int len,char c); //把字符串当前大小置为len,多去少补,多出的字符c填充不足的部分
如:
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
28
29
30
31
32
33
using namespace std;
int main()
{
string str;
if (str.empty())
cout<<"str is NULL."<<endl;
else
cout<<"str is not NULL."<<endl;
str = str + "abcdefg";
cout<<"str is "<<str<<endl;
cout<<"str's size is "<<str.size()<<endl;
cout<<"str's capacity is "<<str.capacity()<<endl;
cout<<"str's max size is "<<str.max_size()<<endl;
cout<<"str's length is "<<str.length()<<endl;
str.resize(20,'c');
cout<<"str is "<<str<<endl;
str.resize(5);
cout<<"str is "<<str<<endl;
return 0;
}
程序执行结果为:
/*
str is NULL.
str is abcdefg
str's size is 7
str's capacity is 15
str's max size is 4294967294
str's length is 7
str is abcdefgccc
str is abcde
*/
查找函数
- size_type find( const basic_string &str, size_type index ); //返回str在字符串中第一次出现的位置(从index开始查找),如果没找到则返回string::npos
- size_type find( const char *str, size_type index ); // 同上
- size_type find( const char *str, size_type index, size_type length ); //返回str在字符串中第一次出现的位置(从index开始查找,长度为length),如果没找到就返回string::npos
- size_type find( char ch, size_type index ); // 返回字符ch在字符串中第一次出现的位置(从index开始查找),如果没找到就返回string::npos
注意:查找字符串a是否包含子串b,不是用 strA.find(strB) > 0 而是 strA.find(strB) != string::npos
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
28
using namespace std;
int main(){
int loc;
string s="study hard and make progress everyday! every day!!";
loc=s.rfind("make",10);
cout<<"the word make is at index"<<loc<<endl;//-1表示没找到
loc=s.rfind("make");//缺省状态下,从最后一个往前找
cout<<"the word make is at index"<<loc<<endl;
loc=s.find_first_of("day");
cout<<"the word day(first) is at index "<<loc<<endl;
loc=s.find_first_not_of("study");
cout<<"the first word not of study is at index"<<loc<<endl;
loc=s.find_last_of("day");
cout<<"the last word of day is at index"<<loc<<endl;
loc=s.find("day");//缺陷状态下从第一个往后找
cout<<loc;
return 0;
}
/*
the word make is at index-1
the word is at index45
the word day(first) is at index3
the first word not of study is at index5
the last word of day is at index47
34
*/
其他常用函数
- string &insert(int p,const string &s); //在p位置插入字符串s
- string &replace(int p, int n,const char *s); //删除从p开始的n个字符,然后在p处插入串s
- string &erase(int p, int n); //删除p开始的n个字符,返回修改后的字符串
- string substr(int pos = 0,int n = npos) const; //返回pos开始的n个字符组成的字符串
- void swap(string &s2); //交换当前字符串与s2的值
- string &append(const char *s); //把字符串s连接到当前字符串结尾
- void push_back(char c) //当前字符串尾部加一个字符c
- const char data()const; //返回一个非null终止的c字符数组,data():与c_str()类似,用于string转const char其中它返回的数组是不以空字符终止,
- const char c_str()const; //返回一个以null终止的c字符串,即c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同,用于string转const char
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
28
29
30
31
32
using namespace std;
int main()
{
string str1 = "abc123defg";
string str2 = "swap!";
cout<<str1<<endl;
cout<<str1.erase(3,3)<<endl; //从索引3开始的3个字符,即删除掉了"123"
cout<<str1.insert(0,"123")<<endl; //在头部插入
cout<<str1.append("123")<<endl; //append()方法可以添加字符串
str1.push_back('A'); //push_back()方法只能添加一个字符
cout<<str1<<endl;
cout<<str1.replace(0,3,"hello")<<endl; //即将索引0开始的3个字符替换成"hello"
cout<<str1.substr(5,7)<<endl; //从索引5开始7个字节
str1.swap(str2);
cout<<str1<<endl;
const char* p = str.c_str();
printf("%s\n",p);
return 0;
}
/*
abc123defg
abcdefg
123abcdefg
123abcdefg123
123abcdefg123A
helloabcdefg123A
abcdefg
swap!
swap!
*/