一、字符与字符串
1、字符:用单引号括起来的单个字符,
如'a'、'_',对应的数据类型是 char。
2、字符串:用双引号括起来的任意多个字符,
如"abc"、"a" 、""、" ",对应的数据类型是 const char [ ],可以保存在字符串 string 类型中,也可以保存在 char 数组中。用 string 类型更方便。
注意:
字符和字符串是不同的类型,不能用赋值号(=)互相赋值。
例如:char a; string b; 其中变量 a 是字符类型,变量 b 是字符串类型。这两者之间的类型不相同,不能有类似于 b=a 或者 a=b 这类型的操作。
二、字符串 string
1、头文件:
要想使用 string 类型,必须在#include<iostream>下面加一行#include <string>
2、字符串的基础操作
(1)定义变量
string a; //这时 a 的值是空字符串""
(2)在定义变量时初始化
string a="ABC"; //这时 a 的值是"ABC"
也可以 string a("ABC");
(3)对已经定义过的变量进行赋值
string a; a="ABC"; //这时 a 的值是"ABC"
(4)输入字符串
string a; cin>>a; //a 的值由输入决定
说明:cin 只能输入一个不带空格、'\t'、'\n'的字符串,即以空格、'\t'、'\n'作为字符串输入 的结束标记。
例如:cin>>a 时如果键盘输入 ab cde,其中 b 和 c 之间有一个空格,那么 a 的值为"ab"。
(5)输入一个可能带空格(以及'\t'的字符串)
string a; getline(cin, s); //把一整行的输入赋给 a
说明:
getline 输入以'\n'作为字符串输入的结束标记。
例如:
getline(cin, s)时如果键盘输入 ab cde,那么 a 的值为"ab cde"。
(6)把一个字符串的值赋给另一个
string a="ABC"; string b; b=a; //这时 b 的值是"ABC"
(7)输出字符串
string a="ABC"; cout<<a; //这时屏幕显示的是 ABC
(8)输出字符串中的某个字符
string a="ABC"; cout<<a[1]; //这时屏幕显示的是 B
(9)把字符串中的某个字符赋值给一个 char 类型变量
string a="ABC"; char b; b=a[0]; //这时 b 的值是'A'
(10)把字符串中的某个字符值进行修改
string a="ABC"; a[1]='C'; //这时 a 的值是"ACC"
(11)字符串长度
定义:字符串中字符的个数。 例如"ABC123"的长度是 6。 字符串 a 的长度:a.length()
【例 1】输入一个字符串,输出其中下标为 0、2、3 的三个字符,不要隔空格,不要换行。
例如
当输入 ABCDE 时,应输出 ACD。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
cout << a[0] << a[2] << a[3];
return 0;
}
【例 2】输入一个字符串,输出该字符串的长度。
#include<iostream> #include<string> using namespace std; int main() { string a; cin >> a; cout << a.length(); return 0; }
运行结果如下——
【例 3】输入两个字符串,输出其中较大的那个。
比较规则:先比较下标 0 的字符,如果 ASCII 码不同,则大小已定;否则继续比较下标 1 的 字符,…,直到比出大小为止。例如"ABC"比"AAA"大,"ABC"比"abc"小,"ABCD"比"ABC"大, "ABC"和"ABC"相等。
代码中可以用>、=、<=、!=来比较字符串大小。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
if (a > b)
{
cout << a;
}
else
{
cout << b;
}
return 0;
}
【例 4】输入一个字符串,输出其中的大写字符。
例如输入 AB53CdAAf,则应输出 ABCAA。
可以根据下标来访问字符串 a 中的某一个字符,下标的合法范围从 0 到 a.length()-1。例如 string a="ABCDE",因为字符串 a 的长度为 5,所以从 a[0]到 a[4]都分别对应一个字符。
代码中可以利用循环语句,循环自变量从 0 循环到长度-1,在循环中把 i 当作下标使用。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (a[i] >= 'A' && a[i] <= 'Z')
{
cout << a[i];
}
}
return 0;
}
【例 5】字符串连接 可以使用“+”把字符串和字符串连在一起,返回一个更长的字符串。
字符串也可以和字符连在一起,字符也可以和字符串连在一起。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a = "abcd";
string b = "efg";
char c = 'h';
string s = a + b; //abcdefg
string t = b + c; //efgh
string u = c + b; //hefg
string v = a + b + c; //abcdefgh
return 0;
}
【例 6】取子串
字符串中的一小段称为子串。使用 substr 函数进行取子串操作。 例如,string a="ABCDEFG",
那么 a.substr(x, y)返回一个字符串,表示从 a 下标为 x 的字符开始,取连续 y 个字符构成的字符串;
a.substr(z)返回一个字符串,表示从 a 下标为 z 的字 符开始,直到结束为止构成的字符串。
故 a.substr(3, 2)返回"DE",a.substr(3)返回"DEFG"。
【例 7】寻找子串的位置 搜索一个字符串是否是另一个字符串的子串。
如果是,返回第一次出现位置的下标;如果不是,返回-1。
string a = "abcdefgh";
string b = "cde";
int c = a.find(b); //2,表示在 a 的第 2 个字符处发现 b
string a = "abcabcabc";
string b = "acb";
int c = a.find(b); //-1,表示没找到
string a = "abcabcabc";
string b = "abc";
int c = a.rfind(b); //6,rfind 从 a 的最后字符开始向前找
string a = "abcabcabc";
string b = "abc";
int c = a.find(b, 2); //3,从 a 下标为 2 的字符开始找