作业介绍
C++字符串语法及基础使用
一、创建字符串及基础操作
(一)创建字符串
string s = "hello world"; // 直接初始化字符串
string s(10, 'a'); // 初始化长度为10、每个字符为'a'的字符串
(二)基本用法
string s = "hello";
cin >> s; // 输入字符串(不含空格)
cout << s << endl; // 输出字符串
int n = s.size(); // 获取字符串长度,等价于 s.length()
(三)字符串拼接
- 字符串拼接字符串:
string s = "hello";
string t = "world";
cout << s + t; // 输出 "helloworld"
- 字符串拼接字符:
string s = "hello";
char t = 'w';
cout << s + t; // 输出 "hellow"
(四)字符串遍历
- 下标遍历:
int l=s.size();
for (int i = 0; i < l; i++)
{
cout << s[i]; // 按顺序输出每个字符
}
(五)字符串比较
支持 >、>=、<=、<、!=、== 运算符,比较规则为字典序(逐位比较ASCII值):
string s = "abc";
string t = "abd";
if (s < t)
{
cout << "s 更小"; // 输出结果,因第3位 'c' < 'd'
}
字典序规则说明
-
从第一个字符开始逐位比较,某一位字符不同则按ASCII值判断大小;
-
若前缀完全相同,较短的字符串更小。
ASCII值大小关系
-
数字字符:
'0'(48) ~'9'(57) -
大写字母:
'A'(65) ~'Z'(90) -
小写字母:
'a'(97) ~'z'(122) -
优先级:
'0'~'9' < 'A'~'Z' < 'a'~'z'
字典序示例
| 字符串1 | 字符串2 | 结果 | 理由 |
|---|---|---|---|
"apple" |
"banana" |
"apple" 更小 |
首字符 'a' < 'b' |
"abc" |
"abcd" |
"abc" 更小 |
前缀相同,"abc" 长度更短 |
"abC" |
"abC" 更小 |
第3位 'C'(67) < 'c'(99) |
|
"a1b2" |
"a1b10" |
"a1b10" 更小 |
前4位前缀相同,第5位 '1' < '2' |
应用场景
- 直接判断字符串大小:
if (s1 < s2) cout << "s1 更小";
- 字符串数组排序:
string a[3] = {"banana", "apple", "orange"};
sort(a, a + 3); // 排序后:["apple", "banana", "orange"]
(六)输入字符串
- 读取一整行(含空格):
string s;
getline(cin, s); // 读取到换行符为止,包含空格
- 循环读取多个字符串(不含空格):
string s;
while (cin >> s)
{
cout << s << endl; // 逐个输出不含空格的字符串
}
- 读入
n个带空格的字符串(需处理换行残留):
int n;
cin >> n;
cin.ignore(); // 清空 cin 读取 n 后残留的换行符
for (int i = 1; i <= n; i++)
{
string s;
getline(cin, s);
cout << s << endl;
}
二、字符串核心函数
(一)查找函数
1. find():查找首次出现位置
-
功能:查找字符或子串在字符串中第一次出现的下标;
-
语法:
int pos = s.find(目标字符/子串); -
返回值:找到返回首字符下标,未找到返回
s.npos(可视为-1)。
string s = "heblb";
int pos1 = s.find("b"); // pos1 = 2(首次出现 'b' 的下标)
int pos2 = s.find("hello"); // pos2 = s.npos(未找到)
if (pos2 == -1) cout << "未找到";
2. rfind():查找末次出现位置
-
功能:查找字符或子串在字符串中最后一次出现的下标;
-
语法与返回值同
find():
string s = "heblb";
int pos = s.rfind("b"); // pos = 4(最后一次出现 'b' 的下标)
(二)子串提取:substr()
-
功能:截取字符串中指定范围的子串;
-
语法:
-
s.substr(a, b):从下标a开始,截取b个字符; -
s.substr(a):从下标a开始,截取到字符串末尾。
-
string s = "hello";
string t1 = s.substr(2, 3); // t1 = "llo"(下标2开始,取3个字符)
string t2 = s.substr(1); // t2 = "ello"(下标1开始到末尾)
打印所有子串
string s;
cin >> s;
int n = s.size();
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
int len = j - i + 1; // 子串长度
string t = s.substr(i, len);
cout << t << "\n";
}
}
(三)反转字符串:reverse()
-
功能:反转字符串全部或部分内容;
-
头文件:
<algorithm>; -
语法:
-
reverse(s.begin(), s.end()):反转整个字符串; -
reverse(s.begin() + l, s.begin() + r + 1):反转下标区间[l, r];
-
-
说明:直接修改原字符串,无返回值。
string s = "hello";
reverse(s.begin(), s.end()); // s 变为 "olleh"
reverse(s.begin() + 1, s.begin() + 3); // 反转下标[1,3],s 变为 "olhle"
(四)字符串排序:sort()
-
功能:按ASCII值对字符串排序(默认升序);
-
头文件:
<algorithm>; -
语法:
-
sort(s.begin(), s.end()):整体升序排序; -
sort(s.begin(), s.end(), greater<>()):整体降序排序; -
sort(s.begin() + l, s.begin() + r + 1):排序下标区间[l, r];
-
-
说明:直接修改原字符串,无返回值。
string s = "cba";
sort(s.begin(), s.end()); // s 变为 "abc"(升序)
sort(s.begin(), s.end(), greater<>()); // s 变为 "cba"(降序)
(五)字符判断与大小写转换
1. 字符判断函数(头文件 <cctype>)
| 函数 | 功能 | 返回值 |
|---|---|---|
islower(char) |
判断字符是否为小写字母 | true/false |
isupper(char) |
判断字符是否为大写字母 | |
isdigit(char) |
判断字符是否为数字(0-9) | |
isalpha(char) |
判断字符是否为字母(大小写) | |
| 示例: | ||
if (islower(s[i])) cout << "小写字母";
if (isdigit(s[i])) cout << "数字字符";
2. 大小写转换函数(头文件 <cctype>)
| 函数 | 功能 | 示例 |
|---|---|---|
tolower(char) |
大写字母转小写,其他不变 | tolower('A') → 'a' |
toupper(char) |
小写字母转大写,其他不变 | toupper('b') → 'B' |
| 示例: | ||
char c = 'A';
c = tolower(c); // c 变为 'a'
(六)类型转换
1. 数值转字符串:to_string()
-
功能:将整数、浮点数等数值类型转为字符串;
-
要求:C++11及以上标准;
int n = 35;
double m = 3.14;
string s1 = to_string(n); // s1 = "35"
string s2 = to_string(m); // s2 = "3.140000"
2. 字符串转数值
| 函数 | 功能 | 示例 |
|---|---|---|
stoi() |
字符串转 int 型 | stoi("1234") → 1234 |
stoll() |
字符串转 long long 型 | stoll("999999999999") → 999999999999 |
(七)字符串修改函数
1. 替换:replace()
-
功能:替换字符串中指定位置的内容;
-
语法:
s.replace(pos, len, str)(从下标pos开始,替换len个字符为str);
string s = "hello";
s.replace(1, 3, "ey"); // 从下标1开始,替换3个字符为"ey",s 变为 "heylo"
2. 插入:insert()
-
功能:在指定位置插入字符串;
-
语法:
s.insert(pos, str)(在下标pos处插入str);
string s = "hlo";
s.insert(1, "el"); // 在下标1处插入"el",s 变为 "hello"
3. 删除:erase()
-
功能:删除字符串中指定范围的字符;
-
语法:
s.erase(pos, len)(从下标pos开始,删除len个字符);
string s = "hello";
s.erase(1, 3); // 从下标1开始,删除3个字符,s 变为 "ho"
三、编译说明
需使用支持 C++11 及以上标准的编译器(如 g++ 需添加参数 -std=c++11)。
DEV C++ 开启 C++14 标准方法
-
打开 DEV C++,点击上方「工具」→「编译器选项」;
-
在「编译器」→「代码生成/优化」中,设置「编译时加入以下命令」:
-std=c++14 -Wall -static-libgcc; -
点击「确定」即可。

题目
- 状态
- 正在进行…
- 题目
- 15
- 开始时间
- 2026-7-2 0:00
- 截止时间
- 2036-7-10 23:59
- 可延期
- 24 小时