C++字符串

初识字符串

  所谓字符串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, '\n');
//第三个参数'\n'可以不写,因为getline函数第三个参数的默认值就是'\n',即可以写成getline(cin, city) cout
<< "The city you entered is " << city << endl; //输出:The city you entered is New York

 

posted @ 2020-03-31 16:35  川尘  阅读(597)  评论(0编辑  收藏  举报
`