C++字符串的基本操作
中等37玩转C++字符串:像串珠子一样处理文字
你有没有想过,电脑是怎么记住你的名字、你的密码、或者一句“你好”的?在C++里,我们用一种叫 字符串 的东西来存放这些文字。字符串就像一串珍珠项链,每颗珍珠就是一个字符(比如字母、数字、汉字或标点)。如果一条项链能串好多珍珠,那一个字符串就能存好多字符。今天我们就来学会怎么“串珍珠”——创建、连接、比较和获取长度这些基本操作。
要使用字符串,先得打开一个叫做 string 的工具箱。在代码最前面加上 #include <string> 就行啦。
1. 创建字符串:给自己做一条新项链
你想存一个名字、一句问候,或者干脆先做一个空项链(里面一颗珍珠都没有)。C++里有好几种做法:
string name = "小明"; // 直接给名字赋值,就像把珍珠穿好
string greeting("你好!"); // 另一种写法,同样塞进一串文字
string emptyStr; // 空字符串,里面没有任何字符,先留着以后用
可以试着把你在游戏里的角色名存进去,或者把妈妈的手机号存进去。记住,双引号 " " 里面就是你要存的文字。
2. 拼接字符串:把两条项链串成一条
你想同时说“小明”和“你好”,就可以用加号 + 把两个字符串连起来。(注意:+号两边的类型都是字符串,不能一边是字符串另一边是数字哦,不过直接加一个字符是可以的。)
string part1 = "小明";
string part2 = ",你好!";
string full = part1 + part2; // 结果变成 "小明,你好!"
full = full + '!'; // 还能直接加一个字符 '!' -> 变成 "小明,你好!!"
生活中的例子:你写作业时名字写错了,老师说“小明,请把名字改正”。你可以用字符串拼接把“小明”和“请把名字改正”连成一句话。
3. 获取字符串长度:数数项链上有几颗珍珠
有时候你要知道一句话有几个字。比如你的密码是“abc123”,想检查是不是刚好6位。用 .length() 或者 .size() 方法(两种写法意思一样):
string word = "Hello";
int len = word.length(); // len = 5,因为 H e l l o 共5个字符
cout << "长度是:" << len << endl;
注意:对于中文汉字,一个汉字算一个字符(不过中文字符在电脑里占两个字节,但length()方法按字符个数返回,所以“你好”的长度是2)。
想一想:你输入朋友圈的验证码时,系统经常提示“验证码是6位”,它背后就是用了 .length() == 6 来判断的。
4. 比较字符串是否相等:两条项链一模一样吗?
用 == 比较两个字符串,就像比较两条项链的珍珠是不是完全一样(顺序、个数、每个字符都要相同)。最常见的用法就是验证密码:
string password = "123456"; // 系统里存的正确密码
string input = "123456"; // 你输入的密码
if (password == input) {
cout << "密码正确,请进!" << endl;
} else {
cout << "密码错误,再试试吧。" << endl;
}
除了 ==,还有 !=(不相等)、<、> 等比较运算符。字符串比较是按字典顺序(像查字典那样)比较的,比如 "apple" < "banana" 因为 a 在 b 前面。不过对于新手,先用 == 就够了。
5. 用下标访问单个字符:找准位置取珍珠
每条项链上的珍珠都有固定的位置编号。第一个珍珠编号是0,第二个是1,以此类推。用方括号 [ ] 可以拿到那个位置上的字符:
string msg = "ABC";
cout << msg[0] << endl; // 输出 'A'
cout << msg[2] << endl; // 输出 'C'
注意:编号不能超过字符串长度减1。如果你写 msg[3],而字符串只有3个字符(下标0,1,2),就会出问题。就像一条只有3颗珍珠的项链,没有第4颗,你硬要去拿,就会拿到奇怪的东西,甚至让程序崩溃。
常见错误(新手一定要小心!)
-
忘记
#include <string>
编译器会报错说string不认识。就像你要用螺丝刀但没从工具箱里拿出来。 -
下标越界
string s = "Hi"; cout << s[2];会得到未知结果(可能是个乱码)。记住下标范围是0 ~ length()-1。 -
用
cin读字符串遇到空格会停
比如你输入Hello World,用cin >> s;只能读到Hello,后面的World丢了。怎么读一整行?用getline(cin, s);。 -
混淆字符和字符串
字符用单引号'A',字符串用双引号"A"。'A'是单个字符,"A"是包含一个字符的字符串,它们类型不同,不能直接比较。 -
拼接时忘了加空格
"你好" + "世界"得到"你好世界",如果想中间有空格要手动加"你好 " + "世界"或"你好" + " " + "世界"。
完整示例:一个好玩的名字游戏
下面这个程序问你名字和姓氏,然后拼接成全名,告诉你长度,再比较你是不是叫“张三”。
#include <iostream>
#include <string> // 字符串工具箱
using namespace std;
int main() {
string firstName; // 存储姓
string lastName; // 存储名
string fullName; // 存储全名
cout << "请输入你的姓:";
cin >> firstName; // 注意:如果姓有空格(如“欧阳”),用getline更好,这里简化
cout << "请输入你的名:";
cin >> lastName;
fullName = firstName + lastName; // 拼接得到全名
cout << "你好," << fullName << "!" << endl;
cout << "你的全名有 " << fullName.length() << " 个字符。" << endl;
// 用下标访问第一个字符
cout << "名字的第一个字符是:" << fullName[0] << endl;
// 判断是不是叫“张三”
string secret = "张三";
if (fullName == secret) {
cout << "哇,你就是传说中的张三!" << endl;
} else {
cout << "你不是张三,你是" << fullName << endl;
}
return 0;
}
试着运行一下,输入你的姓和名,看看结果。
接下来学什么?
现在你已经会了字符串最基本操作:创建、拼接、取长度、比较、拿单个字符。接下来可以学更强大的操作:
- 遍历字符串:用循环逐个处理每个字符(比如统计一个句子中有多少个字母'a')。
- 查找子串:
find()方法能帮你找到“苹果”这个词在句子中的位置。 - 截取子串:
substr()可以从字符串中切出一段,就像从长项链上取下几颗珍珠。 - 替换和插入:把你的名字替换成外号,或者插入一个新词。
加油!字符串是编程里最常用的工具之一,掌握了它,你就可以处理各种文本了。
例题精讲
在C++中,以下哪个函数或成员函数用于获取C风格字符串(字符数组)的长度?
在C++中,两个std::string对象可以直接使用==运算符进行比较。
使用'+'运算符可以将两个C风格字符串(字符数组)直接连接。
以下程序使用cin读取一个字符串,请填空补全代码:#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Enter your name: ";
___ >> name;
cout << "Hello, " << name << endl;
return 0;
}以下程序使用getline读取包含空格的整行字符串,请填空补全代码:#include <iostream>
#include <string>
using namespace std;
int main() {
string fullName;
cout << "Enter your full name: ";
getline(___, fullName);
cout << "Hello, " << fullName << endl;
return 0;
}