学会了string类,自己就不用建字符串类了
string类
1、string类是模板类:
typedef basic_string<char> string;
使用string类要包含头文件
2、string对象的初始化
string s1("hello");
string s2(8,'xs');
string s3 = "world";
错误的方式:
string error1 = 'hello'; // 错误是因为这种形式赋字符串
string error2('world');
string error3(8);
string error4 = 22;
可以将字符赋值给string对象
string s;
s = 'a';
3、string类的成员函数
(1)、string类对象长度用成员函数length()可读取
(2)、string类对象支持数据流运算符
string str("Hello World");
cout<<str<<endl;
cin>>str;
(3)、string对象支持getline函数
string s
getline(cin,s);
4、string的赋值与连接
(1)、用=赋值
string s1,s2;
s1 = s2;
=运算符已经被重载
(2)、用assign成员函数复制
string s1("hello"),s2;
s2.assign(s1);
(3)、用assign成员函数部分复制
string s1("Hello World"),s3;
s3.assign(s1,1,3) //在s1的下标为1的字符开始复制3个字符给s3
注:复制语句两个数字一组,第一个代表位置,第二个代表复制多少
(4)、单个字符复制
s2[1] = s1[3] = 'a';
(5)、逐个访问string对象中的字符
string s1("Hello");
for(i = 0, i < s1.length,i++)
{
cout<<s1.at(i)<<endl;
}
at成员函数会做范围检查,若超出范围,会给出out_of_range异常,而[ ]不会做范围检查
(6)、用+运算符连接字符串
string s1("Hello "),s2("World");
s1 += s2;
cout<<s1<<endl;
string s1("World"),s2("Hello ");
s1.append(s2);
cout<<s1;
s1.append(s2,1,s2.size());//s1.size s1的字符数,size与length相同
// 从s2下标为1开始复制size个字符,若字符串没有这么多字符,则复制到字符串最后一个字符
5、string类的比较
用==,>=,<=,>,<,!=
返回的是bool类型,成立返回true,否则返回false
也可用成员函数compare比较string
string s1("hello"),s2("s")
s1.compare(s2); // 相同返回0,大于返回1,小于返回-1.
6、子串:用成员函数substr生成子串
string s1("Hello World"),s2;
s2 = s1.substr(4,5) // 在s1的下标为4的位置复制5个字符 我搞不懂这个和复制有啥区别。。。
7、交换string:使用swap成员函数
string s1("Hello"),s2("world");
s1.swap(s2);
8、查找string中的字符
1、从头往后找:find()
string s1("asd");
s1.find("as");
在s1中从前往后查找"as"出现的第一次位置。如果找到,返回"a"位置,若没找到,返回string::npos(string中定义的静态常量)
2、从后往前找:rfind()
string s1("asd");
s1.rfind("as");
s1.rfind("as", 2)从下标为2的开始找
s1从后往前查找,"as"第一次出现的位置,找到,返回"a"的下标,若找不到,返回string::npos
3、查找一个字符串的任意一个字符:find_first_of
string s1("aaaa");
s1.first_find_of("abcd");
在s1中查找"abcd"字符串的任意一个字符出现的位置,若有就返回这个字符第一次出现的位置。
4、查找一个字符串的任意一个字符:find_last_of
string s1("aaaa");
s1.first_last_of("abcd");
和上面类似,只不过是返回这个字符最后一次出现的位置。
注:若是有多个,就按被查字符串的字符顺序。
5、查找不在字符串内的字母的位置:find_first_not_of()
从前往后查找,给出的字符串中不在(“abcd”)中的字符,返回第一次出现的位置。
6、查找不在字符串内的字母的位置:find_last_not_of()
从后往前查找,给出的字符串中不在(“abcd”)中的字符,返回第一次出现的位置。
7、删除string类中的字符:erase();
string s2("Hello World");
s2.erase(5); // 去掉下标5及以后的字符
8、替换string类中的字符:replace();
string s1("Hello World");
s1.replace(2,3,"Hello"); // 将s1中下标2开始3个字符换成了"Hello"
注:这个函数可以改变string对象的大小
9、string中插入字符:insert();
string s1("Hello"),s2("World");
s1.insert(2,s2); // 将s2插入到s1的下标为2的位置
s1.insert(2,s2,3,4) // 将s2的下标为3开始的4个字符插入到,s1的下标2的位置
10、转换成c语言式char *字符串:c_str
11、字符串拷贝:copy()
s1.copy(s2,0,5);
s2[5] = 0;
从s1的下标0的位置开始制作一个长度为5的字符串,并把它赋给s2,返回值表明实际复制字符串的长度。
12、字符串流处理
除了标准输入输出流和文件输入输出流外,还可以进行string流输入输出。
使用istringstream,ostringstream进行字符串的输入输出,也称内存输入输出。
头文件为
ostringstream outputstring(output)
int a = 10;
outputstring<<"this"<<a<<endl;