【c++随笔25】char*、char[]、string、int、double互相转换
原创作者:郑同学的笔记原文链接:https://zhengjunxue.blog.csdn.net/article/details/144633919。
·
【c++随笔25】char*、char[]、string、int、double互相转换
原创作者:郑同学的笔记
原文链接:https://zhengjunxue.blog.csdn.net/article/details/144633919
一、char*和char[]互转
- char[] 转char*
char[] 本质上是一个字符数组,char* 是指向字符的指针。它们之间的转换非常简单,因为数组名可以隐式地转换为指向数组第一个元素的指针。
#include <iostream>
int main() {
char arr[] = "Hello";
char* ptr = arr; // char[] 隐式转换为 char*
std::cout << "char[]: " << arr << std::endl;
std::cout << "char*: " << ptr << std::endl;
return 0;
}
- char转char[]
char 和 char[] 之间的转换实际上没有直接的方法,因为它们在内存中的表现是不同的。char* 是一个指向字符数组的指针,而 char[] 是一个固定大小的字符数组。
最常见的做法是通过拷贝操作来实现,即将 char* 指向的字符串复制到一个固定大小的 char[] 中。这通常通过标准库函数 memcpy or strcpy 来实现。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring> // 为了使用 strcpy
int main() {
const char* ptr = "Hello, World!"; // char* 指针指向一个字符串字面量
char arr[50]; // 定义一个足够大的 char[] 数组
char arr2[50];
std::strcpy(arr, ptr);
memcpy(arr2, ptr, sizeof(arr2));
std::cout << "char*: " << ptr << std::endl;
std::cout << "char[]: " << arr << std::endl;
std::cout << "char[]: " << arr2 << std::endl;
return 0;
}
二、char* 和 std::string 之间的转换
- 可以通过构造 std::string 来将 char* 转换为 std::string。
- 反过来也可以通过 std::string 的 c_str() 方法将 std::string 转换为 char*(返回的是一个 const char*,但可以通过 const_cast 将其转换为 char*,但不推荐这么做)。
#include <iostream>
#include <string>
int main() {
// char* to string
const char* ptr = "Hello, World!";
std::string str(ptr);
// string to char*
const char* ptr2 = str.c_str();
std::cout << "char*: " << ptr << std::endl;
std::cout << "std::string: " << str << std::endl;
std::cout << "const char*: " << ptr2 << std::endl;
return 0;
}
三、char[] 和 std::string 之间的转换
- 你可以通过直接使用 std::string 构造函数来将 char[] 转换为 std::string。这会创建一个以 null 终止符(\0)结束的字符串。
- 将 std::string 转换为 char[] 需要调用 std::string 的 c_str() 方法,该方法返回一个 const char*,指向字符串的数据。要转换为 char[](即可以修改的数组),你需要复制内容到一个新的 char[] 数组中。注意:std::string 的 c_str() 返回的是一个 const char*,如果你需要一个可修改的字符数组,必须做拷贝。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
int main() {
// char[] 转换为 std::string
char arr[] = "Hello, World!";
std::string str(arr); // 直接将 char[] 传给 std::string 构造函数
// string to char[]
char arr2[50];
//std::strcpy(arr2, str.c_str()); // 使用 strcpy 复制内容
memcpy(arr2, str.c_str(), 50);
std::cout << "char[]: " << arr << std::endl;
std::cout << "std::string: " << str << std::endl;
std::cout << "char[]: " << arr2 << std::endl;
return 0;
}
四、 int 和 std::string 之间的转换
- std::to_string() 可以将 int 转换为 std::string。
- 反过来可以使用 std::stoi() 来将字符串转换为 int。
#include <iostream>
#include <string>
int main() {
// int to string
int num = 123;
std::string str = std::to_string(num);
// string to int
int num2 = std::stoi(str);
std::cout << "int: " << num << std::endl;
std::cout << "std::string: " << str << std::endl;
std::cout << "converted int: " << num2 << std::endl;
return 0;
}
五、double 和 std::string 之间的转换
- 同样,std::to_string() 可以将 double 转换为 std::string,
- 反过来可以使用 std::stod() 将字符串转换为 double。
#include <iostream>
#include <string>
int main() {
// double to string
double d = 123.456;
std::string str = std::to_string(d);
// string to double
double d2 = std::stod(str);
std::cout << "double: " << d << std::endl;
std::cout << "std::string: " << str << std::endl;
std::cout << "converted double: " << d2 << std::endl;
return 0;
}
更多推荐
所有评论(0)