当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ String转Char Array用法及代码示例


在这里,我们将构建一个 C++ 程序来转换字符串字符数组。我们很多人都遇到过这样的错误‘无法将 std::string 转换为 char[] 或 char* 数据类型’所以 让我们用以下方法解决这个问题5种不同的方法

  1. 使用c_str() strcpy()
  2. 使用c_str()没有strcpy()
  3. 使用for循环
  4. 使用各个方法的地址分配
  5. 使用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)


相关用法


注:本文由纯净天空筛选整理自mohitw16大神的英文原创作品 Convert String to Char Array in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。