一、ASCII码

1.常用:’A’ – ‘Z’ 是 65 – 90,’a’ – ‘z’ 是 97 – 122, ‘0’ – ‘9’ 是 48 – 57。

2.字符可以运算, 运算时会将其当作整数。

二、字符数组

字符输入输出

1.字符串就是字符数组加上结束符’\0’。

2.可以使用字符串来初始化字符数组,但此时要注意每个字符串结尾会含一个’\0’字符,因此字符数组的长度至少要比字符串的长度多1!

3.读入一个字符串时使用cin / scanf, 但两者无法读入空格与换行符, 如果要读入换行符, 使用gets(str), 但新版C++因为安全性不再支持puts, 建议使用fgets(str, 长度, stdin)。

[stdin] 已配好的文件,不需要管是什么

4.输出就和普通的输出一样就可以了。

字符数组常用操作

1.需要引入头文件#include。

2.(1) strlen(str),求字符串的长度

(2) strcmp(a, b),比较两个字符串的大小,a b返回1。这里的比较方式是字典序!

(3) strcpy(a, b),将字符串b复制给从a开始的字符数组。

3.遍历时最好不要写for(int i = 0; i < strlen(str); i ++) 因为strlen()这个函数也会遍历一遍字符数组, 可以在循环外开变量先存长度

三、标准库类型string

定义和初始化

1.需要头文件#include。

2.定义时直接string str;就可以了。

3.初始化直接 = “字符串” 就可以了。

string上的读写

1.C与C++普通的读写均支持,但printf()时必须写成 printf(“%s”, s.c_str());。

2.使用getline读取一整行getline(cin, str);。

string的其他常用操作

1.srt.empty()如果字符串为空返回ture, 反之则返回false。

2.str.size()返回字符串的长度。

3.字符串之间的比较如 == > < 等操作均可进行, 按字典序进行比较。

4.给字符串赋值和给其他变量赋值类似。

5.关于string的加法,两string对象相加在前一个末尾补上, string加字符或是字面值必须保证一个对象时string, 其他的变量会转化为string对象。

6.关于str.substr(起始位, 中止位);返回之间的一段字符串。

处理string对象的字符

1.可以和处理字符数组中的字符一样用循环处理。

2.基于范围的for语句for(char c : str) cout << c << endl; for(char &c : str) c = 'a';

四、练习题

T1

给定一行长度不超过 100100 的非空字符串,请你求出它的具体长度。

输入格式

输入一行,表示一个字符串。注意字符串中可能包含空格。

输出格式

输出一个整数,表示它的长度。

数据范围

1≤字符串长度≤1001≤字符串长度≤100 字符串末尾无回车

输入样例:
I love Beijing.
输出样例:
15
代码
#include#includeusing namespace std;​int main(){string str;getline(cin, str);cout << str.size();return 0;}

T2

输入一行字符,长度不超过 100100,请你统计一下其中的数字字符的个数。

输入格式

输入一行字符。注意其中可能包含空格。

输出格式

输出一个整数,表示数字字符的个数。

输入样例:
I am 18 years old this year.
输出样例:
2
代码
#includeusing namespace std;​int main(){string str;getline(cin, str);int num = 0;for(char c: str) {if(c >= 48 && c <= 57) num ++;}cout << num;return 0;}

T3

循环相克令是一个两人玩的小游戏。

令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。

双方以此动作判定输赢,猎人赢枪、枪赢狗熊、狗熊赢猎人,动作相同则视为平局。

现在给定你一系列的动作组合,请你判断游戏结果。

输入格式

第一行包含整数 T,表示共有 T组测试数据。

接下来 T 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 Hunter, Bear, Gun 中的一个,这三个单词分别代表猎人,狗熊和枪。

输出格式

如果第一个玩家赢了,则输出 Player1

如果第二个玩家赢了,则输出 Player2

如果平局,则输出 Tie

数据范围

1≤T≤100

输入样例
3Hunter GunBear BearHunter Bear
输出样例
Player1TiePlayer2
代码
#include#includeusing namespace std;​int thenum(string str){if(str == "Hunter") return 0;if(str == "Bear") return 1;if(str == "Gun") return 2;}​int main(){int T;cin >> T;while(T --) {string a, b;cin >> a >> b;int player1 = thenum(a), player2 = thenum(b);if(player1 == player2) cout << "Tie\n";else if(player1 == (player2 + 1) % 3) cout << "Player1\n";else cout << "Player2\n"; }return 0;}

T4

给定一个字符串,在字符串的每个字符之间都加一个空格。

输出修改后的新字符串。

输入格式

共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式

输出增加空格后的字符串。

数据范围

1≤字符串长度≤1001≤字符串长度≤100

输入样例:
test case
输出样例:
t e s tc a s e
代码
#include#includeusing namespace std;​int main(){string a, b;getline(cin, a);for(char c: a) b = b + c + ' ';cout << b;return 0;}

T5

给定一个由大小写字母构成的字符串。

把该字符串中特定的字符全部用字符 # 替换。

请你输出替换后的字符串。

输入格式

输入共两行。

第一行包含一个长度不超过 3030 的字符串。

第二行包含一个字符,表示要替换掉的特定字符。

输出格式

输出共一行,为替换后的字符串。

输入样例:
hellol
输出样例:
he##o
代码
#include#includeusing namespace std;​int main(){string a;getline(cin, a);char b;cin >> b;for(char &c: a) {if(c == b) c = '#'; }cout << a;return 0;}

T6

有两个不包含空白字符的字符串 str 和 substr,str的字符个数不超过 1010,substr 的字符个数为 33。(字符个数不包括字符串结尾处的 \0。)

将 substr 插入到 str 中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式

输入包括若干行,每一行为一组测试数据,格式为

str substr
输出格式

对于每一组测试数据,输出插入之后的字符串。

输入样例:
abcab eee12343 555
输出样例:
abceeeab12345553
代码
#include#includeusing namespace std;​int main(){string a, b;while(cin >> a >> b) {string res;for(char c: a) {int check = 1;for(char d: a) {if(d > c) check = 0; }if(check) res = res + c + b;else res = res + c; }cout << res << endl; }return 0;}