- 定义和初始化
#include <string>
using std::string;
string s1; //定义了一个空字符串
string s2 = s1; <==> string s2(s1); //s2为s1的副本
string s3 = "value"; //拷贝初始化
string s4(value); //直接初始化
string s5(n,char ch); //字符串连续n个字符均为ch
- string类上的操作
string 普通读写
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1;
cin >> s1;
/*
while(cin >> s1) //反复读取,直到文件末尾
cout << s1 << endl;
*/
cout << s1 << endl;
return 0;
}
getline读取
istream &getline( char *buffer, streamsize num );
istream &getline( char *buffer, streamsize num, char delim );
用getline()读取字符到buffer中,buffer在代码中通常体现为一个字符数组,streamsize num是一次读入多少个字符, num - 1个字符已经读入, 当碰到一个换行标志, 碰到一个EOF, 或者任意地读入,直到读到字符delim。delim字符不会被放入buffer中。delim字符可以自已设定,默认为回车符’/n’
第一个参数为要存储的指定字符数组。
第二个参数为抽取、读取指定数目的字符。
第三个参数指定结束字符,默认为”\n”;
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1;
while(getline(cin,s1))
cout << s1 << endl;
return 0;
}
string的empty和size函数
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string s1;
cin >> s1;
cout << s1.empty() << endl;//s1是否为空
cout << s1.size() << endl;//s1可视字符的长度
return 0;
}
string size_type
string抽象意义是字符串, size()的抽象意义是字符串的尺寸, string::size_type抽象意义是尺寸单位类型
string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。
string的比较
== !=/比较两个字符串是否相等或不等
运算符”>”,”<”,”>=”,”<=”,”!=”均被重载用于字符串的比较;
int compare(const string &s); //比较当前字符串和s的大小
int compare(int pos, int n,const string &s);//比较当前字符串从pos开始的n个字符组成的字符串与s的大小
int compare(int pos, int n,const string &s,int pos2,int n2);//比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小
compare函数在>时返回1,<时返回-1,==时返回0
string加法和连接
string的加法,实际就是起到一个链接的作用。
两个string可以直接相加
#include <iostream>
using namespace std;
int main() {
string s1 = "fdfg";
string s2 = "frgfbd";
cout << s1 + s2 << endl;
return 0;
}
结果:fdfgfrgfbd
string和字面值相加
#include <iostream>
using namespace std;
int main() {
string s1 = "fdfg";
string s2 = "frgfbd";
cout << s1 + "haha" << endl;
cout << "fhijvi" + "v" << endl;
return 0;
}
结果:error: invalid operands of types ‘const char [7]’ and ‘const char [2]’ to binary ‘operator+’
cout << "fhijvi" + "v" << endl;
也就是说加法两边至少要有一个string 类,两个的结果也是string类
append尾部链接
string &append(const char *s); //把c类型字符串s连接到当前字符串结尾
string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾
string &append(const string &s); ///把字符串s连接到当前字符串的结尾
string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
string &append(int n,char c); //在当前字符串结尾添加n个字符c
string &append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连接到当前字符串的结尾
string的交换和取子串
string substr(int pos = 0,int n = npos);//返回pos开始的n个字符组成的字符串
void swap(string &s2); //交换当前字符串与s2的值
对字符操作
处理所有字符
for(declaration : expression)
statement
eg:
string str("unviubnig");
for(auto c : str) //auto根据编译器来决定该类型
cout << c
cout << endl;
通过引用也可改变string
string str("unviubnig");
for(auto &c : str)
c = toupper(c); //c是引用,所以可以改变字符串
利用下标进行访问
s[0] s[1] …… s[s.size() - 1]
1 2 最后一个
和C语言很相似,同样的时要注意下标越界。