📅  最后修改于: 2023-12-03 14:39:59.488000             🧑  作者: Mango
在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++库中提供的字符串类,使用头文件<string>
。在C++中可以使用以下方式定义和初始化一个C++字符串类:
string str = "hello"; // 定义字符串,并初始化
C++字符串类可以很方便地处理字符串的增删改查等操作,并且可以通过重载运算符实现字符串的拼接、比较等操作。
C++提供了多种操作字符串的方式,包括字符串的连接、查找、替换、分割等。
strcat()
函数将两个字符串连接在一起。char str1[] = "hello";
char str2[] = "world";
strcat(str1, str2); // str1 = "helloworld"
+
运算符将两个字符串连接在一起。string str1 = "hello";
string str2 = "world";
string str3 = str1 + str2; // str3 = "helloworld"
strstr()
函数查找字符串。char str[] = "hello world";
char* substr = strstr(str, "world"); // substr = "world"
find()
函数查找子字符串,并返回其在主字符串中的位置。string str = "hello world";
size_t pos = str.find("world"); // pos = 6
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"
replace()
函数将子字符串替换成目标字符串。string str = "hello,world";
size_t pos = str.find("world");
str.replace(pos, 5, "you"); // str = "hello,you"
strtok()
函数将字符串分割为多个子字符串。char str[] = "hello,world";
char* token = strtok(str, ",");
while(token != NULL)
{
printf("%s\n", token);
token = strtok(NULL, ",");
} // 输出hello和world
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++程序中常用的数据类型之一,广泛应用于各种场景中,包括字符串的比较、转换、哈希等。
strcmp()
函数比较字符串。char str1[] = "hello";
char str2[] = "world";
int result = strcmp(str1, str2); // result < 0
==
运算符比较字符串。string str1 = "hello";
string str2 = "world";
bool result = (str1 == str2); // result = false
atoi()
函数将字符串转换为整数,atof()
函数将字符串转换为浮点数。char str1[] = "123";
int num1 = atoi(str1); // num1 = 123
char str2[] = "3.14";
double num2 = atof(str2); // num2 = 3.14
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++提供了多种操作字符串的方式,可以根据具体需求采用不同的方法实现字符串的处理。在实际开发中,需要注意字符串的长度、空字符等问题,避免出现字符串越界、内存泄漏等问题。