STL:string的常见用法
目录
operator[]: 返回指定位置的字符,不进行边界检查。
c_str(): 返回指向以 null 结尾的字符数组的指针。
data(): 返回指向字符串缓冲区的非 null 结尾字符数组的指针。
erase(pos, len): 删除从指定位置开始的指定长度的字符。
replace(pos, len, str): 用字符串替换从指定位置开始的指定长度的字符:
find(str, pos): 在字符串中查找子串,从指定位置开始:
rfind(str, pos): 从字符串末尾开始查找子串,从指定位置开始。
substr(pos, len): 返回从指定位置开始的指定长度的子串:
compare(pos1, len1, str): 比较字符串的子串与另一字符串。
赋值和连接:
operator=
: 赋值操作符:
operator=
是 std::string
类的赋值操作符,用于将一个字符串赋值给另一个字符串。这个操作符提供了一种方便的方式来复制一个字符串的内容到另一个字符串中。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 使用默认构造函数创建空字符串
std::string emptyString;
// 检查字符串是否为空
if (emptyString.empty()) {
std::cout << "The string is empty." << std::endl;
} else {
std::cout << "The string is not empty." << std::endl;
}
// 输出字符串内容
std::cout << "Empty String: " << emptyString << std::endl;
return 0;
}
-
assign(str)
: 将字符串赋值为另一个字符串:
assign(str)
是 std::string
类的成员函数,用于将一个字符串赋值给另一个字符串。这个函数将目标字符串的内容替换为给定字符串的内容。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义两个字符串
std::string str1 = "Hello";
std::string str2 = "World";
// 使用 assign 函数将 str1 的内容替换为 str2 的内容
str1.assign(str2);
// 输出结果
std::cout << "str1: " << str1 << std::endl;
return 0;
}
-
+=
: 字符串连接操作符:
+=
是 std::string
类的成员运算符,用于将一个字符串连接到另一个字符串的末尾。这个操作符提供了一种方便的方式来执行字符串连接操作。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义两个字符串
std::string str1 = "Hello, ";
std::string str2 = "World!";
// 使用 += 操作符将 str2 连接到 str1 的末尾
str1 += str2;
// 输出结果
std::cout << "Concatenated String: " << str1 << std::endl;
return 0;
}
Concatenated String: Hello, World!
访问和检查:
-
at(pos)
: 返回指定位置的字符,提供边界检查。 -
operator[]
: 返回指定位置的字符,不进行边界检查。 -
front()
: 返回字符串的第一个字符。 -
back()
: 返回字符串的最后一个字符。 -
c_str()
: 返回指向以 null 结尾的字符数组的指针。 -
data()
: 返回指向字符串缓冲区的非 null 结尾字符数组的指针。
字符串信息:
-
length()
,size()
: 返回字符串的长度。 -
empty()
: 检查字符串是否为空。
修改字符串:
-
insert(pos, str)
: 在指定位置插入字符串。
insert(pos, str)
是 std::string
类的成员函数,用于在目标字符串的指定位置 pos
处插入另一个字符串 str
。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 在位置 7 插入字符串 "Beautiful "
str.insert(7, "Beautiful ");
// 输出结果
std::cout << "Modified String: " << str << std::endl;
return 0;
}
Modified String: Hello, Beautiful World!
在这个例子中,str.insert(7, "Beautiful ");
使用了 insert
函数,在字符串的位置 7 处插入了字符串 "Beautiful "。现在,str
的内容变为了 "Hello, Beautiful World!"。
这个函数允许在指定位置插入其他字符串,提供了一种方便的方式来修改字符串的内容。插入操作会在指定位置处打开一个空间,以容纳要插入的字符串。
-
erase(pos, len)
: 删除从指定位置开始的指定长度的字符。
erase(pos, len)
是 std::string
类的成员函数,用于删除目标字符串从指定位置 pos
开始的指定长度 len
的字符。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 删除从位置 7 开始的长度为 5 的字符
str.erase(7, 5);
// 输出结果
std::cout << "Modified String: " << str << std::endl;
return 0;
}
Modified String: Hello, !
在这个例子中,str.erase(7, 5);
使用了 erase
函数,从字符串的位置 7 开始删除长度为 5 的字符。现在,str
的内容变为了 "Hello!"。
这个函数提供了一种方便的方式来修改字符串,删除不需要的部分。如果需要删除的长度超过了目标字符串的长度,erase
会删除尽可能多的字符,如果 len
大于目标字符串从 pos
开始的可用长度,则删除到字符串的末尾。
-
replace(pos, len, str)
: 用字符串替换从指定位置开始的指定长度的字符:
replace(pos, len, str)
是 std::string
类的成员函数,用于用指定的字符串 str
替换目标字符串从指定位置 pos
开始的指定长度 len
的字符。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 用字符串 "Universe" 替换从位置 7 开始的长度为 5 的字符
str.replace(7, 5, "Universe");
// 输出结果
std::cout << "Modified String: " << str << std::endl;
return 0;
}
Modified String: Hello, Universe!
在这个例子中,str.replace(7, 5, "Universe");
使用了 replace
函数,从字符串的位置 7 开始,用字符串 "Universe" 替换了长度为 5 的字符。现在,str
的内容变为了 "Hello, Universe!"。
这个函数提供了一种方便的方式来修改字符串的一部分。如果需要替换的长度超过了目标字符串的长度,replace
会替换尽可能多的字符,如果 len
大于目标字符串从 pos
开始的可用长度,则替换到字符串的末尾。
-
push_back(c)
: 在字符串末尾添加字符。 -
pop_back()
: 删除字符串末尾的字符。
查找和比较:
-
find(str, pos)
: 在字符串中查找子串,从指定位置开始:
find(str, pos)
是 std::string
类的成员函数,用于在字符串中查找指定的子串,从指定位置 pos
开始。如果找到子串,则返回子串第一次出现的位置,否则返回 std::string::npos
。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 在字符串中查找子串 "World",从位置 7 开始
size_t foundPos = str.find("World", 7);
// 输出结果
if (foundPos != std::string::npos) {
std::cout << "Substring found at position: " << foundPos << std::endl;
} else {
std::cout << "Substring not found." << std::endl;
}
return 0;
}
Substring found at position: 7
在这个例子中,str.find("World", 7);
使用了 find
函数,从位置 7 开始在字符串中查找子串 "World"。因为 "World" 子串从位置 7 开始确实存在,所以 foundPos
将会被赋值为该子串在字符串中的位置。输出结果将是 "Substring found at position: 7"。
如果指定位置之后没有找到子串,find
函数将返回 std::string::npos
,表示未找到。这个函数提供了一种在字符串中查找子串的方便方法。
-
rfind(str, pos)
: 从字符串末尾开始查找子串,从指定位置开始。 -
substr(pos, len)
: 返回从指定位置开始的指定长度的子串:
substr(pos, len)
是 std::string
类的成员函数,用于返回从指定位置 pos
开始的指定长度 len
的子串。这个函数不修改原始字符串,而是返回一个新的 std::string
对象,包含从指定位置开始的指定长度的字符。以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 提取从位置 7 开始的长度为 5 的子串
std::string substring = str.substr(7, 5);
// 输出结果
std::cout << "Substring: " << substring << std::endl;
return 0;
}
Substring: World
在这个例子中,str.substr(7, 5);
使用了 substr
函数,从字符串的位置 7 开始提取长度为 5 的子串。现在,substring
包含了 "World"。
这个函数允许你从字符串中提取子串,而不必修改原始字符串。返回的 std::string
对象可以独立使用,方便在程序中进行进一步的操作。
-
compare(str)
: 比较字符串与另一字符串。 -
compare(pos1, len1, str)
: 比较字符串的子串与另一字符串:
compare(pos1, len1, str)
是 std::string
类的成员函数,用于比较目标字符串从位置 pos1
开始的长度为 len1
的子串与另一个字符串 str
。返回值是一个整数,表示比较的结果。
以下是比较的规则:
- 如果目标字符串的子串在字典序上小于
str
,则返回负值。 - 如果目标字符串的子串在字典序上大于
str
,则返回正值。 - 如果两者相等,返回零。
以下是一个使用例子:
#include <iostream>
#include <string>
int main() {
// 定义一个字符串
std::string str = "Hello, World!";
// 比较从位置 0 开始的长度为 5 的子串与 "Hello"
int result = str.compare(0, 5, "Hello");
// 输出结果
if (result < 0) {
std::cout << "Substring is less than \"Hello\"" << std::endl;
} else if (result > 0) {
std::cout << "Substring is greater than \"Hello\"" << std::endl;
} else {
std::cout << "Substring is equal to \"Hello\"" << std::endl;
}
return 0;
}
在这个例子中,str.compare(0, 5, "Hello");
使用了 compare
函数,比较了字符串的从位置 0 开始的长度为 5 的子串与字符串 "Hello"。由于这两者相等,输出结果将是 "Substring is equal to "Hello""。
这个函数允许你比较字符串的一部分与另一个字符串,提供了一种方便的方式来执行字典序比较。