字符和字符串
一、核心原则
先记住:C++里的std::string就像“装文字的盒子”,可以存一句话、一个词语,操作起来和搭积木一样简单,使用前要先写 #include <string> 和 #include <iostream>(用来输出看结果)。
二、小学生必学的字符串操作(附趣味示例)
1. 定义字符串(创建“文字盒子”)
作用:给字符串起名字,存想要的文字。
语法:string 名字 = "文字内容";
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
// 定义字符串,存名字、句子
string name = "小明";
string sentence = "我喜欢编程!";
// 输出字符串(cout 是“打印”的意思)
cout << "名字:" << name << endl;
cout << "句子:" << sentence << endl;
return 0;
}
运行结果:
名字:小明
句子:我喜欢编程!
2. 字符串拼接(把两个“盒子”的文字合起来)
作用:把多个字符串连在一起,比如“姓”+“名”、“句子”+“表情”。
语法:用 + 或 +=(直接追加)。
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string lastName = "张";
string firstName = "三";
// 拼接全名
string fullName = lastName + firstName;
cout << "全名:" << fullName << endl;
string talk = "今天天气好";
// 追加文字(直接在原字符串后面加)
talk += ",适合出去玩!";
cout << "完整的话:" << talk << endl;
return 0;
}
运行结果:
全名:张三
完整的话:今天天气好,适合出去玩!
3. 查字符串长度(数文字有多少个)
作用:看字符串里有多少个字符(一个汉字/字母/标点都算1个)。
语法:字符串名.size() 或 字符串名.length()(两个用法完全一样)。
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string word = "苹果";
string sentence = "我有5个苹果!";
// 查长度
cout << "“苹果”的长度:" << word.size() << endl;
cout << "句子的长度:" << sentence.length() << endl;
return 0;
}
运行结果:
“苹果”的长度:2
句子的长度:7
4. 字符串比较(判断两个“盒子”的文字是否一样)
作用:判断两个字符串内容是否相同(比如验证密码、找相同的词语)。
语法:用 ==(一样)、!=(不一样)。
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string password = "123456";
string input = "123456";
// 比较是否一样
if (password == input) {
cout << "密码正确!" << endl;
} else {
cout << "密码错误!" << endl;
}
string fruit1 = "香蕉";
string fruit2 = "橘子";
if (fruit1 != fruit2) {
cout << "两个水果不一样!" << endl;
}
return 0;
}
运行结果:
密码正确!
两个水果不一样!
5. 截取子串(从长字符串里“抠”出一小段)
作用:从字符串里取出指定位置的部分文字(比如从“一年级二班”里抠出“二班”)。
语法:字符串名.substr(起始位置, 截取长度)(注意:起始位置从0开始数!)。
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string classInfo = "一年级二班";
// 从位置3开始,截取2个字符(位置0:一,1:年,2:级,3:二,4:班)
string className = classInfo.substr(3, 2);
cout << "班级:" << className << endl;
string phone = "13812345678";
// 截取后4位(从位置7开始,截4个)
string last4 = phone.substr(7, 4);
cout << "手机号后4位:" << last4 << endl;
return 0;
}
运行结果:
班级:二班
手机号后4位:5678
6. 清空字符串(把“盒子”里的文字删掉)
作用:清空字符串里的所有内容,变成空盒子。
语法:字符串名.clear()。
示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string note = "今天要写作业";
cout << "清空前:" << note << endl;
// 清空
note.clear();
cout << "清空后:" << "[" << note << "]" << endl; // 括号里是空的
return 0;
}
运行结果:
清空前:今天要写作业
清空后:[]
三、小学生入门小练习(可直接运行)
#include <iostream>
#include <string>
using namespace std;
int main() {
// 练习1:拼接自己的名字和学校
string myName = "李华";
string mySchool = "阳光小学";
string info = myName + "在" + mySchool + "读三年级。";
cout << info << endl;
// 练习2:查自己名字的长度
cout << "我的名字有" << myName.size() << "个字" << endl;
// 练习3:截取学校名称里的“小学”
string schoolPart = mySchool.substr(2, 2);
cout << "学校类型:" << schoolPart << endl;
return 0;
}
运行结果:
李华在阳光小学读三年级。
我的名字有2个字
学校类型:小学
四、简单总结(小学生能记住的)
- 用
string定义文字变量,就像给“文字盒子”起名字; +可以把文字连起来,size()能数文字个数;==能判断两个文字是否一样,substr能抠出想要的小段文字;- 所有操作都要先写
#include <string>和#include <iostream>。
如果想练某类具体场景(比如输入文字、找字符串里的某个字),可以说,我再做更简单的示例~
针对小学生的理解能力,我把 substr(截取子串)、erase(删除字符),以及和它们搭配常用的 insert(插入字符)、replace(替换字符)都整理成「简单解释+趣味示例」,这些是除了查找类函数外,小学生最常用的字符串操作~
针对小学生的理解能力,咱们把 find() 函数拆成超简单的解释+趣味示例,核心就讲:find() 是用来「找字符串里的某个字/某段文字,看它在第几个位置」。
一、先记核心知识点(小学生版)
- 作用:在一个字符串里,找指定的字/词语,返回它的“位置编号”;如果没找到,就返回一个特殊值(记成“没找到”就行)。
- 位置编号规则:从 0 开始数(不是从 1 开始!),比如“苹果派”里,“苹”是 0,“果”是 1,“派”是 2。
- 语法:
字符串名.find(要找的内容)
二、超简单示例(直接能运行)
示例1:找单个字
#include <iostream>
#include <string>
using namespace std;
int main() {
// 定义一个字符串(比如一句话)
string sentence = "我爱吃苹果";
// 找“苹”字的位置
int pos = sentence.find("苹");
// 输出结果
cout << "“苹”字在第" << pos << "个位置(从0开始数)" << endl;
return 0;
}
运行结果:
“苹”字在第4个位置(从0开始数)
(数一下:我(0)、爱(1)、吃(2)、苹(3)?哦不对,重新数:“我(0)、爱(1)、吃(2)、苹(3)、果(4)”——如果示例里写“苹”,pos是3,修正示例更直观👇)
修正后示例1:
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence = "我爱吃苹果";
// 找“苹”字
int pos = sentence.find("苹");
cout << "句子:" << sentence << endl;
cout << "“苹”字的位置是:" << pos << endl; // 结果是3
return 0;
}
运行结果:
句子:我爱吃苹果
“苹”字的位置是:3
示例2:找一段文字(词语)
#include <iostream>
#include <string>
using namespace std;
int main() {
string story = "小猫钓鱼,小猫抓老鼠";
// 找“小猫”这个词语(找第一次出现的位置)
int pos = story.find("小猫");
cout << "“小猫”第一次出现在第" << pos << "个位置" << endl;
return 0;
}
运行结果:
“小猫”第一次出现在第0个位置
示例3:判断“有没有找到”(重点!)
find() 如果没找到目标,会返回 string::npos(可以理解成“找不到的标记”),咱们用 if 判断就行:
#include <iostream>
#include <string>
using namespace std;
int main() {
string fruit = "香蕉、橘子、葡萄";
// 找“苹果”在不在里面
int pos = fruit.find("苹果");
if (pos != string::npos) { // 不等于“没找到”,就是找到了
cout << "找到苹果啦,位置是:" << pos << endl;
} else {
cout << "没找到苹果哦~" << endl;
}
return 0;
}
运行结果:
没找到苹果哦~
三、小学生专属小练习(动手试)
#include <iostream>
#include <string>
using namespace std;
int main() {
// 自己改一改:把名字/要找的字换成自己的
string myName = "王小明";
string wantFind = "明";
// 找“明”字的位置
int pos = myName.find(wantFind);
cout << "我的名字是:" << myName << endl;
cout << "“" << wantFind << "”字在第" << pos << "个位置" << endl;
// 额外:找“小红”在不在名字里
int pos2 = myName.find("小红");
if (pos2 == string::npos) {
cout << "我的名字里没有小红哦~" << endl;
}
return 0;
}
运行结果:
我的名字是:王小明
“明”字在第2个位置
我的名字里没有小红哦~
四、一句话总结(小学生能记住)
find() 就像“文字寻宝”:告诉它要找的字/词语,它会告诉你藏在第几个位置(从0数),找不到就告诉你“没找到”。
如果想练更有趣的场景(比如找手机号里的“8”、找句子里的“玩”字),可以说,咱们再做定制示例~
一、核心函数速览(小学生版)
| 函数名 | 一句话解释(小学生版) | 简单语法 |
|---|---|---|
substr |
从字符串里“抠”出一小段文字 | 字符串名.substr(起始位置, 截取长度) |
erase |
从字符串里“删掉”指定位置的文字 | 字符串名.erase(起始位置, 要删的长度) |
insert |
在字符串指定位置“插入”文字 | 字符串名.insert(插入位置, 要插的文字) |
replace |
把字符串里指定位置的文字“替换”成新文字 | 字符串名.replace(起始位置, 替换长度, 新文字) |
二、逐个讲透(附可直接运行的示例)
1. substr —— 抠出想要的小段文字
关键:起始位置从 0 开始数,第二个参数是“要抠几个字”。
#include <iostream>
#include <string>
using namespace std;
int main() {
string info = "三年级五班的小明";
// 从位置0开始,抠3个字(“三年级”)
string grade = info.substr(0, 3);
// 从位置3开始,抠2个字(“五班”)
string cls = info.substr(3, 2);
// 从位置7开始,抠2个字(“小明”)
string name = info.substr(7, 2);
cout << "年级:" << grade << endl;
cout << "班级:" << cls << endl;
cout << "名字:" << name << endl;
return 0;
}
运行结果:
年级:三年级
班级:五班
名字:小明
2. erase —— 删掉不要的文字
关键:指定“从哪删”“删几个”,删完剩下的文字会自动连起来。
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence = "我不喜欢吃胡萝卜";
// 从位置2开始,删2个字(删掉“不喜”)
sentence.erase(2, 2);
cout << "删完后的句子:" << sentence << endl; // 结果“我欢吃胡萝卜”
return 0;
}
运行结果:
删完后的句子:我欢吃胡萝卜
3. insert —— 插入想加的文字
关键:指定“插在哪”,新文字会出现在这个位置前面。
#include <iostream>
#include <string>
using namespace std;
int main() {
string gift = "我有一本书";
// 在位置3(“一”前面)插入“好看的”
gift.insert(3, "好看的");
cout << "插入后的句子:" << gift << endl; // 结果“我有好看的一本书”
return 0;
}
运行结果:
插入后的句子:我有好看的一本书
4. replace —— 把旧文字换成新文字
关键:指定“从哪换”“换几个字”,用新文字替换掉。
#include <iostream>
#include <string>
using namespace std;
int main() {
string animal = "小猫喜欢吃鱼";
// 从位置0开始,把2个字(“小猫”)换成“小狗”
animal.replace(0, 2, "小狗");
cout << "替换后的句子:" << animal << endl; // 结果“小狗喜欢吃鱼”
return 0;
}
运行结果:
替换后的句子:小狗喜欢吃鱼
三、综合小练习(一次练会所有函数)
#include <iostream>
#include <string>
using namespace std;
int main() {
// 初始句子:可以换成自己喜欢的话
string s = "今天我吃了苹果,明天我要吃香蕉";
// 1. substr:抠出“苹果”
string fruit1 = s.substr(7, 2);
cout << "抠出的第一个水果:" << fruit1 << endl;
// 2. replace:把“香蕉”换成“草莓”
s.replace(15, 2, "草莓");
cout << "替换后:" << s << endl;
// 3. insert:在“草莓”前插入“甜甜的”
s.insert(15, "甜甜的");
cout << "插入后:" << s << endl;
// 4. erase:删掉“今天我吃了”
s.erase(0, 6);
cout << "删除后最终句子:" << s << endl;
return 0;
}
运行结果:
抠出的第一个水果:苹果
替换后:今天我吃了苹果,明天我要吃草莓
插入后:今天我吃了苹果,明天我要吃甜甜的草莓
删除后最终句子:苹果,明天我要吃甜甜的草莓
四、小学生专属总结(好记版)
| 函数 | 做什么 | 小口诀 |
|---|---|---|
| substr | 抠文字 | 先数位置,再数个数 |
| erase | 删文字 | 从哪删,删几个 |
| insert | 加文字 | 插在哪,加什么 |
| replace | 换文字 | 换哪段,换成啥 |
所有操作都要记住:位置从 0 开始数(比如“苹果”的“苹”是 0,“果”是 1),如果想练更贴合小学生的场景(比如改名字、拼句子、删错题),可以说,咱们再做定制示例~
- Status
- Done
- Rule
- ACM/ICPC
- Problem
- 12
- Start at
- 2025-12-16 14:30
- End at
- 2025-12-24 22:30
- Duration
- 200 hour(s)
- Host
- Partic.
- 39