接着学习C++中的string容器。字符串操作在任何编程语言都很常见,每个语言都提供了一些常见的API,例如字符串查找,替换,删除等。这篇来学习字符串的构造函数和赋值操作。
1.string的基本概念
string是C++风格的字符串,而string本质上是一个类。string和har * 区别:char *是一个指针,string是一个类,类内部封装了char *,管理这个字符串,是一个char *形的容器。
string类有这些特点,string类内部封装了很多成员方法,例如查找find, 拷贝copy,删除delete,替换replace, 插入insert
string管理char * 所分配的内存,不用但系赋值越界和取值越界,由类内部进行负责。
2.string的构造函数
构造函数原型:
1) string(); //创建一个空的字符串,例如string str;
2) string(const char* s); //使用字符串s初始化
3) string(const string& str); //使用一个string对象初始化另外一个string对象
4) string(int n, char c); //使用n个字符c初始化
下面分别用代码来测试这四种构造函数的基本使用过程。
#include <iostream>
#include <string>
using namespace std;
void test01()
{
// 默认空参构造,创建一个空的字符串对象
string str;
cout << "字符串长度:" << str.length() << endl;
// 使用字符串s初始化对象
const char * st = "hello"; // c语言风格的字符串
string str2 = string(st);
cout << "字符串长度:" << str2.length() << endl;
// 使用一个string对象初始化另外一个string对象
string str3 = "hello";
string str4 = string(str3);
cout << "字符串长度:" << str4.length() << endl;
//使用n个字符c初始化
string str5 = string(5, 'c');
cout << "str5:" << str5<< endl;
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果
常见的创建字符串对象就以上四种。当然,可以在在VS编辑器点击string, 按下f12,可以看到basic_string的源码,其实还有一些其他的构造函数。
3.string的赋值操作
构造就是给对象初始化,在初始化之后,一般需要使用赋值操作。下面来看看string的赋值操作函数。
string& operator=(const char* s); // char*类型字符串赋值给当前的字符串
string& operator=(const string &s); // 把字符串s赋值给当前的字符串
string& operator=(char c); // 字符串赋值给当前的字符串
string& assign(const char *s); //把字符串s赋给当前的字符串
string& assign(const char *s, int n); //把字符串s的前n个字符赋值给当前字符串
string& assign(const string &s); //把字符串s赋值给当前字符串
string& assign(int n, char c); // 用n个字符c赋值给当前字符串
下面使用代码测试一下string中赋值相关的成员函数
#include <iostream>
#include <string>
using namespace std;
void test01()
{
//string& operator=(const char* s); // char*类型字符串赋值给当前的字符串
const char * st = "helloWorld";
string str1 = st;
cout << "str1: " << str1 << endl;
//string& operator=(const string &s); // 把字符串s赋值给当前的字符串
string s1 = "Tom";
string str2 = s1;
cout << "str2: " << str2 << endl;
//string& operator=(char c); // 字符串赋值给当前的字符串
string str3;
str3 = 'C';
cout << "str3: " << str3 << endl;
//string& assign(const char *s); //把字符串s赋给当前的字符串
string str4;
str4.assign(st);
cout << "str4: " << str4 << endl;
//string& assign(const char *s, int n); //把字符串s的前n个字符赋值给当前字符串
string str5;
str5.assign(st, 5);
cout << "str5: " << str5 << endl;
//string& assign(const string &s); //把字符串s赋值给当前字符串
string st2 = "Anthony";
string str6;
str6.assign(st2);
cout << "str6: " << str6 << endl;
//string& assign(int n, char c); // 用n个字符c赋值给当前字符串
string str7;
str7.assign(6, 'a');
cout << "str7: " << str7 << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果: