string 类是 C++ 中常用的处理字符串的类,它提供了很多有用的函数和方法。下面是一些常用的 string 类函数和方法:
一.使用前的准备工作:
#include <string> // 引入 <string> 头文件
using namespace std; // 使用命名空间 std
string str; // 定义一个空字符串变量
str = "hello world"; // 给字符串变量赋值
二.常用string 类的成员函数:
1 | str.length() 或str.size() | 返回字符串的长度 |
2 | str.empty() | 判断字符串str是否为空,字符串为空返回(true)1,不为空返回0(false) |
3 | str.clear() | 清空字符串str内容。 |
4 | str.c_str() | 返回一个以 null 结尾的字符数组,用于与 C 风格的字符串交互。 |
5 | str.at(index) | 返回字符串str中指定位置的字符。 |
6 | str[index] | 通过索引访问字符串str中的字符。 |
7 | str.substr(index,length) | 返回一个子字符串,包含指定位置和长度的部分。 |
8 | str.find(指定字符串) | 返回字符串str中第一次出现指定子字符串的位置index。 |
9 | str.rfind(指定字符串) | 返回字符串str中最后一次出现指定子字符串的位置index。 |
10 | str.append(指定字符串) | 在字符串str末尾追加另一个字符串。 |
11 | str.insert(index,指定字符串) | 在指定位置插入一个字符串。 |
12 | str.erase(index,length) | 删除指定位置或指定范围内的字符。 |
13 | str.replace(index,length,指定字符串) | 替换指定位置或指定范围内的字符为另一个字符串。 |
14 | str.compare(str,被比较字符串) | compare(): 比较两个字符串的大小关系。如果str > 被比较字符串,返回1 ;str < 被比较字符串,返回-1;str == 被比较字符串,返回0。 |
三.代码示例:
1.length() 或 size():
string str = "Hello, World!";
int len = str.length(); // 或者 int len = str.size();
printf("%d\n",len);// 输出:字符串的长度为:13
2.empty():
string str = "Hello";
int result = str.empty();
if(reslult)
{
printf("字符串是否为空:是\n");
}
else
{
printf("字符串是否为空:否\n");
}
// 输出:字符串是否为空:否
3.clear():
string str = "Hello";
str.clear();
printf("清空后的字符串:%s\n",str.c_str()); // 输出:清空后的字符串:
4.c_str():
string str = "Hello";
const char* cstr = str.c_str();
printf("C 风格字符串:%s\n", cstr); // 输出:C 风格字符串:Hello
注意:
在这段代码中,将`str`转换为C风格字符串并赋值给`const char* cstr`时,使用了`const`关键字来修饰指针变量的类型,即`const char*`。
`const`关键字用于声明一个变量为常量,即该变量的值在声明之后不能被修改。在这里,将`cstr`声明为`const char*`类型的常量指针,是为了表明该指针指向的内容不可更改。
在C++中,`c_str()`函数返回的指针类型通常是`const char*`,这是因为C++字符串常常是以常量形式存在的,而且在C++标准库中规定了这样的行为。因此,为了遵循这个规定并确保字符串的不可变性,通常会将`cstr`声明为指向常量的指针,即`const char*`类型。
总结起来,将`cstr`声明为`const char*`类型是为了强调字符串的不可变性,并防止对字符串内容的修改。
5.at(index):
string str = "Hello";
char ch = str.at(1);
printf("索引1位置的字符:%c\n",ch); // 输出:索引1位置的字符:e
6.operator[]:
string str = "Hello";
char ch = str[1];
printf("索引1位置的字符:%c\n",ch); // 输出:索引1位置的字符:e
7.substr():
string str = "Hello, World!";
string substr = str.substr(7, 5);
printf("子字符串:%s\n",substr); // 输出:子字符串:World
8.find():
string str = "Hello, World!";
size_t pos = str.find("World");
if (pos != string::npos)
{
printf("子字符串的位置:%d\n",pos); // 输出:子字符串的位置:7
}
else
{
printf("未找到子字符串\n");
}
9.append():
string str = "Hello";
str.append(", World!");
printf("追加后的字符串:%s\n",str.c_str()); // 输出:追加后的字符串:Hello, World!
10.insert();
string str = "Hello";
str.insert(5, ", World!");
printf("插入后的字符串:%s\n",str.c_str()); // 输出:插入后的字符串:Hello, World!
11.erase():
string str = "Hello, World!";
str.erase(5, 7);
printf("删除后的字符串:%s\n" ,str.c_str()); // 输出:删除后的字符串:Hello!
12.replace():
string str = "Hello, World!";
str.replace(7, 5, "Universe");
printf("替换后的字符串:%s",str.c_str()); // 输出:替换后的字符串:Hello, Universe!
13.compare():
string str1 = "Hello";
string str2 = "World";
int result = str1.compare(str2);
if (result == 0)
{
printf("两个字符串相等\n");
}
else if (result < 0)
{
printf("str1 小于 str2\n");
}
else
{
printf("str1 大于 str2\n");
}