在这里,我们将构建一个 C++ 程序来转换字符串到字符数组。我们很多人都遇到过这样的错误‘无法将 std::string 转换为 char[] 或 char* 数据类型’所以 让我们用以下方法解决这个问题5种不同的方法:
- 使用c_str() 和strcpy()
- 使用c_str()没有strcpy()
- 使用for循环
- 使用各个方法的地址分配
- 使用data()(C++17 及更高版本)
输入:
string s = "geeksforgeeks";
输出:
char s[] = { 'g', 'e', 'e', 'k', 's', 'f', 'o', 'r', 'g', 'e', 'e', 'k', 's', '\0' };
1. 使用c_str()和strcpy()
执行此操作的一种方法是复制string到字符数组。这可以在以下人员的帮助下完成c_str()和strcpy()函数 Library 的字符串。
c_str()函数用于返回指向数组的指针,该数组包含表示字符串当前值的以 null 结尾的字符序列。
const char* c_str() const;
如果抛出异常,则字符串不会发生任何变化。但是,当我们需要查找或访问各个元素时,我们使用 strcpy() 函数将其复制到字符数组。复制之后,我们就可以像简单的数组一样使用它了。所采用的 char 数组的长度不应小于输入字符串的长度。
为了创建一个新数组来包含字符,我们必须使用 new 动态分配 char 数组。当我们处理完数组后,我们还必须记住使用delete[]。这样做是因为与 C 不同,C++ 不支持堆栈上的可变长度数组 (VLA)。
例子:
C++
// C++ program to convert string
// to char array using c_str()
#include <cstring>
#include <string>
#include <iostream>
// driver code
int main()
{
// assigning value to string s
std::string s = "geeksforgeeks";
const int length = s.length();
// declaring character array (+1 for null terminator)
char* char_array = new char[length + 1];
// copying the contents of the
// string to char array
strcpy(char_array, s.c_str());
for (int i = 0; i < length; i++)
{
std::cout << char_array[i];
}
delete[] char_array;
return 0;
}
geeksforgeeks
- 时间复杂度:在)
- 辅助空间:O(1)
2. 使用c_str()没有strcpy()
方法 1 的另一种方式可以是这样,而不使用 strcpy() 函数。此选项不会创建新字符串。
例子:
C++
// C++ program to convert string
// to char array Using c_str()
// without strcpy()
#include <cstring>
#include <string>
#include <iostream>
// driver code
int main()
{
// assigning value to string s
std::string s = "GeeksForGeeks";
// the c_str() function returns
// a const pointer to null
// terminated contents.
const char* str = s.c_str();
// printing the char array
std::cout << str;
return 0;
}
GeeksForGeeks
- 时间复杂度:在)
- 辅助空间:O(1)
3. 使用for循环
我们可以使用for循环来遍历std::string的每个元素,并将字符一一分配给char数组。
例子:
C++
// C++ program to convert string
// to char array Using for loop
#include <iostream>
#include <string>
// driver code
int main()
{
// assigning value to string s
std::string s = "GeeksForGeeks";
// create a new array of chars to copy to (+1 for a null terminator)
char* char_array = new char[s.length() + 1];
// make sure that the new string is null terminated
char_array[s.length()] = '\0';
for (int i = 0; i < s.length(); i++) {
char_array[i] = s[i];
}
std::cout << char_array;
delete[] char_array;
return 0;
}
GeeksForGeeks
- 时间复杂度:在)
- 辅助空间:O(1)
4. 使用各个方法的地址分配
这是最简单、最有效的一种。我们可以直接将字符串的第一个字符的地址分配给指向字符的指针。这应该是首选方法,除非您的逻辑需要字符串的副本。
例子:
C++
// C++ program to convert string
// to char array Using the address
// assignment of each other method
#include <iostream>
#include <string>
// Driver Code
int main()
{
std::string s = "GeeksForGeeks";
char* char_arr = &s[0];
std::cout << char_arr;
return 0;
}
GeeksForGeeks
- 时间复杂度:在)
- 辅助空间:O(1)
5.使用.data()(使用C++17或更高版本)
使用 .data() 访问 std::string 的非常量 char* 是 C++17 或更高版本中的最佳选择。注意:这无法在 GeeksforGeeks IDE 中运行,因为它不支持 C++17。
例子:
C++
// C++ program to convert string
// to char array using .data()
#include <iostream>
#include <string>
// Driver Code
int main()
{
std::string s = "GeeksForGeeks";
char* char_arr = s.data();
std::cout << char_arr;
return 0;
}
输出
GeeksForGeeks
- 时间复杂度:在)
- 辅助空间:O(1)
相关用法
- C++ String转Integer用法及代码示例
- C++ String转int用法及代码示例
- C++ String转Date用法及代码示例
- C++ String转Integer Vector用法及代码示例
- C++ String转size_t用法及代码示例
- C++ String Assign()用法及代码示例
- C++ String Data()用法及代码示例
- C++ String Find()用法及代码示例
- C++ String append()用法及代码示例
- C++ String at()用法及代码示例
- C++ String back()用法及代码示例
- C++ String begin()用法及代码示例
- C++ String c_str()用法及代码示例
- C++ String capacity()用法及代码示例
- C++ String cbegin()用法及代码示例
- C++ String cend()用法及代码示例
- C++ String clear()用法及代码示例
- C++ String compare()用法及代码示例
- C++ String copy()用法及代码示例
- C++ String crbegin()用法及代码示例
- C++ String crend()用法及代码示例
- C++ String empty()用法及代码示例
- C++ String end()用法及代码示例
- C++ String erase()用法及代码示例
- C++ String find_first_not_of()用法及代码示例
注:本文由纯净天空筛选整理自mohitw16大神的英文原创作品 Convert String to Char Array in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。