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