C++字符串是编程中不可或缺的一部分,它涉及到许多重要的操作和函数。本文主要讲解两种类型的字符串:基于`char[]`的字符数组和C++标准库中的`std::string`类。 A. Char 字符串 1. `strcmp(s1, s2)`:这个函数用于比较两个C-style字符串(以`\0`结束的字符数组)的大小。它遵循ASCII码的顺序,首先比较长度,长度相等时逐个比较字符。如果`s1`在字典序上大于`s2`,返回正数;如果两者相等,返回0;如果`s1`小于`s2`,返回负数。 2. `strncmp(s1, s2, n)`:与`strcmp`类似,但只比较前n个字符。如果在比较的n个字符内发现不匹配,或者在达到n之前遇到`\0`,则返回相应的比较结果。 3. `strlen(s1)`:计算字符串`s1`的长度,不包括末尾的`\0`字符。 4. `strlwr(s1)`:将`s1`中的所有大写字母转换为小写字母,原地修改`s1`的内容。 5. `strupr(s1)`:与`strlwr`相反,将`s1`中的所有小写字母转换为大写字母,同样修改原字符串。 B. String 字符串 C++中的`std::string`类提供了更方便和安全的字符串操作方式。与`char[]`相比,`std::string`支持更多的特性,如: - **定义**:可以直接初始化,如`std::string str1("da")`。 - **赋值**:可以使用`=`, 如`str1 = str2`,这是合法的,不同于`char[]`。 - **输入输出**:可以使用`cin`和`cout`进行输入输出,`cin`会忽略开头的空白字符。 - **成员函数**: - `empty()`:检查字符串是否为空,返回布尔值。 - `size()`:返回字符串的长度。 - `[]`:访问指定索引的字符,注意越界会出错。 - `+` 和 `+=`:用于连接两个字符串。 - `=`:赋新值给字符串对象。 - `insert(pos, s2)`:在指定位置`pos`插入字符串`s2`。 - `substr(pos, n)`:从`pos`位置开始截取`n`个字符。 - `erase(pos, n)`:删除从`pos`开始的`n`个字符。 - `replace(pos, n, s2)`:替换从`pos`开始的`n`个字符为`s2`。 - `find(s2, pos)`:查找`s2`在字符串中首次出现的位置,从`pos`开始。 - `c_str()`:返回一个指向C-style字符串的指针,内容与原`std::string`相同。 C. 示例程序 以下代码示例演示了如何使用`std::string`处理字符串,包括查找、替换和删除操作: ```cpp #include <iostream> int main() { std::string str; std::cin >> str; // 输入 // 输出第一个 'b' 的位置 std::cout << str.find("b", 0) << " "; // 替换所有 'a' 为 'c' for (int i = 0; i >= 0; i++) { int index_a = str.find("a", 0); if (index_a < 0) // 判断是否找尽 break; str.replace(index_a, 1, "c"); } // 删除所有 "xy" for (int i = 0; i >= 0; i++) { int index_xy = str.find("xy", 0); if (index_xy < 0) // 判断是否找尽 break; str.erase(index_xy, 2); } std::cout << str << std::endl; // 输出 return 0; } ``` C++中的字符串处理既包含传统的`char[]`形式,也有`std::string`类提供的高级功能。理解并熟练掌握这些操作对于编写高效的C++代码至关重要。通过学习和实践,可以更好地应对各种字符串处理问题。