當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。