5. String字符串
c++包含两种风格的字符串
- C 风格字符串
- C++ 引入的 string 类类型
1. char类型
C风格的字符串起源于C语言,并在C++中继续得到支持。字符串实际上是使用null字符\0终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。
<span class="tag">#include</span> <iostream>
using namespace std;
int main() {
char site1[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
char site2[] = "RUNOOB";
char site3[8] = "RUNOOB";
cout << "site1:" << site1 << " ,size:" << sizeof(site1) << endl;
cout << "site2:" << site2 << " ,site:" << sizeof(site2) << endl;
cout << "site3:" << site3 << " ,site:" << sizeof(site3) << endl;
cout << "site1:" << site1 << " ,len:" << strlen(site1) << endl;
cout << "site2:" << site2 << " ,len:" << strlen(site2) << endl;
cout << "site3:" << site3 << " ,len:" << strlen(site3) << endl;
}
"""
site1:RUNOOB ,size:7
site2:RUNOOB ,site:7
site3:RUNOOB ,site:8
site1:RUNOOB ,len:6
site2:RUNOOB ,len:6
site3:RUNOOB ,len:6
"""
2. 字符串函数
| 函数 & 目的 |
|---|
| strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
| strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如: string str1 = "runoob"; string str2 = "google"; string str = str1 + str2; |
| strlen(s1); 返回字符串 s1 的长度。 |
| strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 |
| strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
| strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
3. string类型
string类型需要添加<span class="tag">#include</span> <string>
3.1. 声明和初始化
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
using namespace std
int main() {
// 默认初始化,创建一个空字符串
string str1;
// 使用字符串字面量初始化
string str2 = "Hello";
// 拷贝初始化
string str3(str2);
// 直接初始化,指定重复次数和字符
string str4(5, 'A');
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
std::cout << "str3: " << str3 << std::endl;
std::cout << "str4: " << str4 << std::endl;
return 0;
}
"""
str1:
str2: Hello
str3: Hello
str4: AAAAA
"""
3.2. 字符串操作
3.2.1. 字符串拼接
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str1 = "Hello";
std::string str2 = " World";
// 使用 + 进行拼接
std::string result1 = str1 + str2;
// 使用 += 进行拼接
str1 += str2;
std::cout << "result1: " << result1 << std::endl;
std::cout << "str1: " << str1 << std::endl;
return 0;
}
"""
result1: Hello World
str1: Hello World
"""
3.2.2. 字符串长度
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
using namespace std;
int main() {
std::string str = "Hello";
std::cout << "字符串长度: " << str.size() << std::endl;
std::cout << "字符串长度: " << str.length() << std::endl;
return 0;
}
"""
字符串长度: 5
字符串长度: 5
"""
3.2.3. 访问字符元素
可以使用下标运算符 [] 或 at() 成员函数访问字符串中的单个字符串元素
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str = "Hello";
// 使用下标运算符访问
std::cout << "第一个字符: " << str[0] << std::endl;
// 使用 at() 函数访问
std::cout << "第二个字符: " << str.at(1) << std::endl;
return 0;
}
"""
第一个字符: H
第二个字符: e
"""
3.2.4. 字符串比较
可以使用 "==、!=、<、>" 等比较运算符进行字符串比较
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str1 = "apple";
std::string str2 = "banana";
if (str1 < str2) {
std::cout << str1 << " 在字典序上小于 " << str2 << std::endl;
}
return 0;
}
"""
apple 在字典序上小于 banana
"""
3.2.5. 查找字符串
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str = "Hello World";
size_t pos = str.find("World");
if (pos != std::string::npos) {
std::cout << "子字符串 'World' 的位置: " << pos << std::endl;
} else {
std::cout << "未找到子字符串" << std::endl;
}
return 0;
}
// 子字符串 'World' 的位置: 6
3.2.6. 截取子字符串
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str = "Hello World";
// 从位置 6 开始截取长度为 5 的子字符串
std::string subStr = str.substr(6, 5);
std::cout << "截取的子字符串: " << subStr << std::endl;
return 0;
}
// 截取的子字符串: World
3.2.7. 字符串替换
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
int main() {
std::string str = "Hello World";
// 从位置 6 开始,替换长度为 5 的子字符串为 "Universe"
str.replace(6, 5, "Universe");
std::cout << "替换后的字符串: " << str << std::endl;
return 0;
}
// 替换后的字符串: Hello Universe
4. c和c++风格字符串互转
<span class="tag">#include</span> <iostream>
<span class="tag">#include</span> <string>
<span class="tag">#include</span> <cstdio>
int main() {
std::string str = "Hello";
const char* cStr = str.c_str();
std::printf("C 风格字符串: %s\n", cStr);
std::string str2(cStr);
std::cout << "std::string 对象: " << str2 << std::endl;
return 0;
}
"""
C 风格字符串: Hello
std::string 对象: Hello
"""