初识字符串
所谓字符串string,就是一序列的字符。也就是说,多个字符拼起来就是一个字符串了,但是字符串和字符是两个完全不同的数据类型。在前面讲字符的博客也提到过(详见C++——字符),字符串使用双引号(""),而字符使用的是单引号('')。下面声明一个string类型的变量str,它的值是I like C++
string str = "I like C++";
cout << str << endl;
//显示结果:I like C++
string类型不是C++中原有的数据类型,它是一个对象类型,对象和类在之后会有详细介绍,现在看不懂没有关系,直接略过就可以了。对象是通过类定义的,string就是一个预先定义在头文件<string>中的类。而一个对象是一个类的实例。
这里有必要说一下string的初始化。我们说,任何一个变量都应该被初始化,这是一种好的编程风格,以避免不必要的错误。
string s = "";
//string的初始化,初始化为空字符串
string函数
函数 | 描述 |
length() | 返回字符串中的字符个数 |
size() | 同上 |
at(index) | 返回字符串指定位置的字符 |
举个栗子:
string str = "I like C++"; cout << "str的值是:" << str << endl; //str的值是:I like C++ cout << "str的长度为:" << str.length() << endl; //str的长度为:10 cout << "str的第一个字符是:" << str.at(0) << endl; //str的第一个字符是:I
//访问字符串某个位置的字符也可以用str[index]的方式 //注意,在几乎所有程序语言中,一个序列的第一个元素的下标是0而不是1
//因此,下标的范围是0~str.length()-1
字符串操作
1. 修改字符串
如果想要修改字符串某个位置的字符,可以通过下标直接修改:
string str = "I like C++"; str[0] = 'i'; cout << str << endl; //i like C++
2. 连接字符串
如果想要连接两个字符串,可以用"+":
string s1 = "I like "; string s2 = "C++"; string s3 = s1 + s2; cout << "s1 + s2 : " << s3 << endl; //s1 + s2 : I like C++
也可以使用"+=":
string s1 = "I like "; string s2 = "C++"; cout << "原s1:" << s1 << endl; //原s1:I like s1 += s2; //相当于s1 = s1 + s2; cout << "拼接后s1 : " << s3 << endl; //拼接后s1 : I like C++
3. 比较字符串
用关系运算符比较(==, !=, <, <=, >, >=),比较的规则是:从左向右比较每一个字符,也就是说字符串的比较实际是在比较字符
假设s1为ABC,s2为ABD
对于关系式(s1 < s2),首先比较各自的第一个字符(都是A),相等,再比较第二个字符(都是B),相等,然后比较第三个字符(s1[2] = 'C',s2[2] = 'D','C' < 'D'),故关系式为true。
4.读取字符串
string city = ""; cout << "Enter a city: "; //假设从键盘输入:Tianjin cin >> city; cout << "The city you entered is " << city << endl; //输出:The city you entered is Tianjin
但是这个程序有一个问题,就是当城市的名字中间有空格怎么办?因为键盘输入时,空格是分割符,加入我们输入"New York",那么最后显示的结果是:"The city you entered is New"。这很明显不是我们想要的结果。解决方案如下:
string city = ""; cout << "Enter a city: "; //假设从键盘输入:New York getline(cin, city, ' ');
//第三个参数' '可以不写,因为getline函数第三个参数的默认值就是' ',即可以写成getline(cin, city) cout << "The city you entered is " << city << endl; //输出:The city you entered is New York