📜  C++字符串(1)

📅  最后修改于: 2023-12-03 14:39:59.488000             🧑  作者: Mango

C++字符串

在C++中,字符串是由一系列字符组成的序列。C++提供了多种方式来表示字符串以及进行字符串的处理。本文将介绍C++字符串的基本概念、字符串的表示方式、字符串的操作、以及字符串在C++中的常见应用。

字符串表示方式

C++中有两种表示字符串的方式:C风格字符串和C++字符串类。

C风格字符串

C风格字符串是由字符数组表示的字符串。C风格字符串以空字符'\0'结尾,也被称为"以空字符结尾的字符串"。 在C++中可以使用以下方式定义和初始化一个C风格字符串:

char str[] = "hello"; // 定义字符串初始化
char str[6] = {'h','e','l','l','o','\0'}; // 定义并初始化字符数组
C++字符串类

C++字符串类是标准C++库中提供的字符串类,使用头文件<string>。在C++中可以使用以下方式定义和初始化一个C++字符串类:

string str = "hello"; // 定义字符串,并初始化

C++字符串类可以很方便地处理字符串的增删改查等操作,并且可以通过重载运算符实现字符串的拼接、比较等操作。

字符串操作

C++提供了多种操作字符串的方式,包括字符串的连接、查找、替换、分割等。

连接字符串
  • C风格字符串可以通过strcat()函数将两个字符串连接在一起。
char str1[] = "hello";
char str2[] = "world";
strcat(str1, str2); // str1 = "helloworld"
  • C++字符串类可以通过重载+运算符将两个字符串连接在一起。
string str1 = "hello";
string str2 = "world";
string str3 = str1 + str2; // str3 = "helloworld"
查找字符串
  • C风格字符串可以通过strstr()函数查找字符串。
char str[] = "hello world";
char* substr = strstr(str, "world"); // substr = "world"
  • C++字符串类可以通过find()函数查找子字符串,并返回其在主字符串中的位置。
string str = "hello world";
size_t pos = str.find("world"); // pos = 6
替换字符串
  • C风格字符串可以通过strtok()函数将字符串分割为多个子字符串,并可以通过替换子字符串的方式实现字符串的替换。
char str[] = "hello,world";
char* token = strtok(str, ",");
while(token != NULL)
{
    if(strcmp(token, "world") == 0)
    {
        strcpy(token, "you");
    }
    token = strtok(NULL, ",");
} // str = "hello,you"
  • C++字符串类可以通过replace()函数将子字符串替换成目标字符串。
string str = "hello,world";
size_t pos = str.find("world");
str.replace(pos, 5, "you"); // str = "hello,you"
分割字符串
  • C风格字符串可以通过strtok()函数将字符串分割为多个子字符串。
char str[] = "hello,world";
char* token = strtok(str, ",");
while(token != NULL)
{
    printf("%s\n", token);
    token = strtok(NULL, ",");
} // 输出hello和world
  • C++字符串类可以通过自定义函数将字符串按指定分隔符分割为多个子字符串。
vector<string> split(string str, string delimiter)
{
    size_t pos = 0;
    vector<string> result;
    while((pos = str.find(delimiter)) != string::npos)
    {
        string token = str.substr(0, pos);
        result.push_back(token);
        str.erase(0, pos + delimiter.length());
    }
    result.push_back(str);
    return result;
}

string str = "hello,world";
vector<string> tokens = split(str, ",");
for(vector<string>::iterator it = tokens.begin(); it != tokens.end(); it++)
{
    printf("%s\n", (*it).c_str());
} // 输出hello和world
常见应用

字符串是C++程序中常用的数据类型之一,广泛应用于各种场景中,包括字符串的比较、转换、哈希等。

字符串比较
  • C风格字符串可以通过strcmp()函数比较字符串。
char str1[] = "hello";
char str2[] = "world";
int result = strcmp(str1, str2); // result < 0
  • C++字符串类可以通过重载==运算符比较字符串。
string str1 = "hello";
string str2 = "world";
bool result = (str1 == str2); // result = false
字符串转换
  • C风格字符串可以通过atoi()函数将字符串转换为整数,atof()函数将字符串转换为浮点数。
char str1[] = "123";
int num1 = atoi(str1); // num1 = 123

char str2[] = "3.14";
double num2 = atof(str2); // num2 = 3.14
  • C++字符串类可以通过stoi()函数将字符串转换为整数,stod()函数将字符串转换为浮点数。
string str1 = "123";
int num1 = stoi(str1); // num1 = 123

string str2 = "3.14";
double num2 = stod(str2); // num2 = 3.14
哈希字符串
  • C风格字符串可以通过哈希算法将字符串映射为哈希值。哈希算法的实现可以使用各种技术,包括BKDR哈希、Murmur哈希等。

  • C++字符串类可以使用STL中的std::hash<>模板类将字符串映射为哈希值。

string str = "hello world";
size_t hash_value = std::hash<string>()(str); // 计算字符串的哈希值
总结

本文介绍了C++字符串的基本概念、字符串的表示方式、字符串的操作、以及字符串在C++中的常见应用。C++提供了多种操作字符串的方式,可以根据具体需求采用不同的方法实现字符串的处理。在实际开发中,需要注意字符串的长度、空字符等问题,避免出现字符串越界、内存泄漏等问题。