作业介绍

字符串知识点总结

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()

(三)字符串拼接

  1. 字符串拼接字符串:

string s = "hello";
string t = "world";
cout << s + t; // 输出 "helloworld"
  1. 字符串拼接字符:

string s = "hello";
char t = 'w';
cout << s + t; // 输出 "hellow"

(四)字符串遍历

  1. 下标遍历:
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'
}

字典序规则说明

  1. 从第一个字符开始逐位比较,某一位字符不同则按ASCII值判断大小;

  2. 若前缀完全相同,较短的字符串更小。

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'

应用场景

  1. 直接判断字符串大小:

if (s1 < s2) cout << "s1 更小";
  1. 字符串数组排序:

string a[3] = {"banana", "apple", "orange"};
sort(a, a + 3); // 排序后:["apple", "banana", "orange"]

(六)输入字符串

  1. 读取一整行(含空格):

string s;
getline(cin, s); // 读取到换行符为止,包含空格
  1. 循环读取多个字符串(不含空格):

string s;
while (cin >> s) 
{
    cout << s << endl; // 逐个输出不含空格的字符串
}
  1. 读入 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 标准方法

  1. 打开 DEV C++,点击上方「工具」→「编译器选项」;

  2. 在「编译器」→「代码生成/优化」中,设置「编译时加入以下命令」:-std=c++14 -Wall -static-libgcc

  3. 点击「确定」即可。

    img

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
15
开始时间
2026-7-2 0:00
截止时间
2036-7-10 23:59
可延期
24 小时