C++程序字符串处理:从基础到实用技巧

字符串C++中的基本表示

在写C++程序时,处理文本几乎是每个项目都会遇到的任务。比如你正在做一个学生成绩管理系统,需要存储学生姓名;或者开发一个小型聊天工具,得接收和发送消息。这些场景里,字符串就是最基础的数据类型之一。

C++里有两种常见的字符串表示方式:一种是来自C语言的字符数组,另一种是C++标准库提供的 string 类。前者用起来稍显麻烦,后者更方便安全。

使用字符数组处理字符串

字符数组是以 char 类型为基础的数组,通常以 \0 结尾。比如定义一个名字变量:

char name[20] = "张三";

这种方式看似简单,但容易出问题。如果输入的名字太长,超出数组长度,就会造成缓冲区溢出——这不仅是bug来源,还可能被攻击者利用。

操作这类字符串需要调用 <cstring> 头文件里的函数,例如 strcpy、strcat、strlen 等。

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char str1[50] = "Hello, ";
    char str2[] = "world!";
    strcat(str1, str2);  // 拼接字符串
    cout << str1 << endl;  // 输出: Hello, world!
    return 0;
}

用string类简化操作

现代C++编程中,推荐使用 string 类。它封装了所有常见操作,不用担心内存越界,语法也更自然。

要使用 string,需包含头文件 <string>:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting = "你好";
    string name = "小明";
    string message = greeting + " " + name + "!";
    cout << message << endl;  // 输出: 你好 小明!
    
    cout << "长度为:" << message.length() << endl;
    return 0;
}

你看,拼接用 + 号就行,求长度直接调 length() 方法,读起来像日常说话一样顺畅。

常用操作举例

实际编程中,经常要做查找、替换、分割这些事。比如你想检查用户输入的邮箱是否包含 @ 符号:

string email = "user@example.com";
if (email.find("@") != string::npos) {
    cout << "这是一个有效的邮箱格式" << endl;
}

find 函数返回子串的位置,如果没找到就返回 string::npos。

再比如提取文件名中的扩展名:

string filename = "document.pdf";
int pos = filename.rfind('.');  // 从右边找最后一个点
if (pos != -1) {
    string ext = filename.substr(pos + 1);
    cout << "扩展名为:" << ext << endl;  // 输出: pdf
}

与用户交互时的注意事项

用 cin 直接读取字符串会遇到空格截断的问题。比如输入“北京 欢迎你”,cin 只拿到“北京”。

这时候应该用 getline:

string input;
cout << "请输入一句话:";
getline(cin, input);
cout << "你说的是:" << input << endl;

这样整行内容都能完整读进来,适合处理带空格的句子。

字符串处理虽小,却是编程的基本功。掌握好这些方法,写起程序来会顺手很多。