c++中string字符串与其他类型的转换

发布于:2024-12-18 ⋅ 阅读:(43) ⋅ 点赞:(0)

一、string 转换成其他类型

1、转换为整数

使用std::stoi(适用于int)、std::stol(适用于long)、std::stoll(适用于long long)、std::stoul(适用于unsigned long)和std::stoull(适用于unsigned long long)等函数。

#include <string>
#include <iostream>

int main() {
    std::string str = "12345";
    int num = std::stoi(str);
    std::cout << "Integer: " << num << std::endl;
    return 0
}

2、转换为浮点数

使用std::stof(适用于float)、std::stod(适用于double)和std::stold(适用于long double)等函数。

#include <string>
#include <iostream>

int main() {
    std::string str = "123.45";
    double num = std::stod(str);
    std::cout << "Double: " << num << std::endl;
    return 0;
}

3、转换为布尔值

虽然标准库没有直接提供将std::string转换为bool的函数,但可以通过比较字符串内容来实现。

#include <string>
#include <iostream>

bool stringToBool(const std::string& str) {
    return str == "true" || str == "1";
}

int main() {
    std::string str = "true";
    bool b = stringToBool(str);
    std::cout << "Bool: " << b << std::endl;
    return 0;
}

4、转换为单个 char

如果你想要获取 std::string 中的第一个字符(或任意位置的字符),你可以直接访问字符串的索引

std::string str = "hello";

char ch = str[0]; // 获取第一个字符 'h'

5、转换为 char*(可修改)

你可以使用 std::string 的 data() 或 c_str() 方法来获取一个指向字符串内部数据的指针,但这个指针是 const char* 类型的。如果你需要一个 char* 类型的指针(即你可以修改指向的数据),你需要分配一个新的字符数组并复制内容。

std::string str = "hello";
char* charArray = new char[str.length() + 1]; // +1 是为了 '\0' 终止符
std::strcpy(charArray, str.c_str());


delete[] charArray; // 不要忘记释放内存

注意:在现代C++中,通常建议使用 std::string 而不是裸的 char*,以避免手动内存管理带来的复杂性和错误。

6、转换为 const char*

这是最常见的转换,通常用于需要将 std::string 传递给接受 const char* 参数的函数或API。

std::string str = "hello";
const char* cStr = str.c_str();

二、其他类型转换为string

1、整数转换为std::string

使用std::to_string函数

#include <string>
#include <iostream>

int main() {
    int num = 12345;
    std::string str = std::to_string(num);
    std::cout << "String: " << str << std::endl;
    return 0;
}

2、浮点数转换为std::string

同样使用std::to_string函数。

#include <string>
#include <iostream>

int main() {
    double num = 123.45;
    std::string str = std::to_string(num);
    std::cout << "String: " << str << std::endl;
    return 0;
}

3、布尔值转换为std::string

可以使用条件运算符或标准库中的字符串流(std::stringstream)。

 #include <string>
#include <iostream>
#include <sstream>

int main() {
    bool b = true;
    std::string str = b ? "true" : "false";
    // 或者使用 std::stringstream
    // std::stringstream ss;
    // ss << (b ? "true" : "false");
    // std::string str = ss.str();
    std::cout << "String: " << str << std::endl;
    return 0;
}

4、单个 char 转换为 std::string

你可以将单个字符转换为 std::string,只需将该字符作为字符串字面量的一个元素。

char ch = 'h';
std::string str = std::string(1, ch); // 或者更简单地 str = {ch}; (C++11及以后)

5、char*(或 const char*)转换为 std::string

可以使用 std::string 的构造函数来从 char* 或 const char* 创建字符串。

 const char* cStr = "hello";
std::string str(cStr);
char charArray[] = "world";
std::string anotherStr(charArray);

注意事项

当从 std::string 转换为 char* 时,要记得在适当的时候释放分配的内存(如果你使用了 new)。

当从 char*(或 const char*)转换为 std::string 时,std::string 会管理自己的内存,你不需要(也不应该)尝试删除它内部的字符数据。

尽量避免在需要 const char* 的地方使用 char*,除非你有充分的理由需要修改字符串数据。使用 const 可以提高代码的安全性和可读性。

三、使用std::stringstream进行更复杂的转换

std::stringstream是另一个强大的工具,可以用于将复杂的数据类型转换为字符串,或将字符串解析为复杂的数据类型

1、将复杂类型转换为std::string

#include <string>
#include <sstream>
#include <iostream>

struct Point {
    int x, y;

};

std::string toString(const Point& p) {
    std::stringstream ss;
    ss << "(" << p.x << ", " << p.y << ")";
    return ss.str();
}

int main() {
    Point p = {1, 2};
    std::string str = toString(p);
    std::cout << "String: " << str << std::endl;
    return 0;
}

2、将std::string解析为复杂类型

#include <string>
#include <sstream>
#include <iostream>

struct Point {
    int x, y;
};

Point stringToPoint(const std::string& str) {
    Point p;
    std::stringstream ss(str);
    char ch;
    ss >> ch >> p.x >> ch >> p.y >> ch; // 解析字符串,假设格式是"(x, y)"
    return p;
}

int main() {
    std::string str = "(1, 2)";
    Point p = stringToPoint(str);
    std::cout << "Point: (" << p.x << ", " << p.y << ")" << std::endl;
    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到