c++字符串函数有那些
时间: 2025-05-03 22:39:23 浏览: 13
### C++ 字符串函数列表及用法
在 C++ 中,字符串可以通过两种方式表示:字符数组(C 风格字符串)和 `std::string` 类型。对于这两种形式的字符串,分别有不同的函数来处理。
#### 一、针对 C 风格字符串的函数
这些函数通常定义在 `<cstring>` 或 `<string.h>` 头文件中,适用于以 `\0` 结尾的字符数组。
1. **计算字符串长度**
- 函数名称:`size_t strlen(const char* str)`
- 功能描述:返回字符串的实际长度,不包括终止符 `\0`。
- 示例代码:
```cpp
#include <iostream>
#include <cstring>
int main() {
const char ch[] = "abcde";
std::cout << "Length of string: " << strlen(ch) << std::endl;
return 0;
}
```
- 输出结果:`Length of string: 5`
2. **复制字符串**
- 函数名称:`char *strcpy(char *dest, const char *src)` 和 `char *strncpy(char *dest, const char *src, size_t n)`
- 功能描述:将源字符串的内容复制到目标字符串中。`strncpy` 可指定最大复制字节数。
- 示例代码:
```cpp
#include <iostream>
#include <cstring>
int main() {
char src[] = "hello world";
char dest[50];
strcpy(dest, src);
std::cout << "Copied String: " << dest << std::endl;
return 0;
}
```
3. **连接字符串**
- 函数名称:`char *strcat(char *dest, const char *src)` 和 `char *strncat(char *dest, const char *src, size_t n)`
- 功能描述:将两个字符串拼接在一起。`strncat` 支持限定追加的最大字节数。
- 示例代码:
```cpp
#include <iostream>
#include <cstring>
int main() {
char first[] = "Hello ";
strcat(first, "World");
std::cout << "Concatenated String: " << first << std::endl;
return 0;
}
```
4. **比较字符串**
- 函数名称:`int strcmp(const char *lhs, const char *rhs)` 和 `int strncmp(const char *lhs, const char *rhs, size_t count)`
- 功能描述:逐字符比较两字符串大小关系。如果相等则返回 0;小于返回负数;大于返回正数。
- 示例代码:
```cpp
#include <iostream>
#include <cstring>
int main() {
const char s1[] = "apple";
const char s2[] = "banana";
if (strcmp(s1, s2) == 0)
std::cout << "Strings are equal." << std::endl;
else
std::cout << "Strings differ." << std::endl;
return 0;
}
```
---
#### 二、针对 `std::string` 的成员方法
现代 C++ 推荐使用标准库中的 `std::string` 来代替传统的 C 风格字符串。它提供了更安全的操作接口以及丰富的内置功能。
1. **获取字符串长度**
- 方法名称:`.length()` 或 `.size()`
- 功能描述:返回当前字符串所含有效字符的数量。
- 示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string text = "example";
std::cout << "String length: " << text.length() << std::endl;
return 0;
}
```
2. **查找子串位置**
- 方法名称:`.find(sub_str, pos=0)`
- 功能描述:从指定起始索引处寻找某子序列首次出现的位置。未找到时返回特殊值 `std::string::npos`。
- 示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string sentence = "This is a test.";
size_t index = sentence.find("test");
if (index != std::string::npos)
std::cout << "'test' found at position: " << index << std::endl;
else
std::cout << "'test' not found!" << std::endl;
return 0;
}
```
3. **替换部分文本**
- 方法名称:`.replace(pos, len, new_sub_str)`
- 功能描述:把原字符串的一部分替换成新的片段。
- 示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string greeting = "Good morning!";
greeting.replace(5, 7, "evening"); // 替换掉"morning"
std::cout << "Modified Greeting: " << greeting << std::endl;
return 0;
}
```
4. **分割字符串**
虽然没有直接提供 split 方法,但可以借助辅助工具完成此任务。以下是基于循环逻辑的一个简单例子:
```cpp
#include <iostream>
#include <sstream>
#include <vector>
void split(const std::string &s, char delim, std::vector<std::string> &elems){
std::stringstream ss(s);
std::string item;
while(std::getline(ss,item,delim)){
elems.push_back(item);
}
}
int main(){
std::string data="one,two,three,four";
std::vector<std::string> tokens;
split(data,',',tokens);
for(auto& token : tokens){
std::cout<<token<<"\n";
}
return 0;
}
```
上述程序会打印每一项单独的单词[^2]。
另外还有其他一些常用的方法像判断字母数字属性(`isalpha`, `isdigit`)等也属于字符串范畴内的操作[^3]。
阅读全文
相关推荐













