➣ Reading Time: 15 minutes

前言

此文章中會整理所有在 C/C++ 字串 的互相轉換用法,
包含 char string stringstream 的互相轉換,
其中 char 我們又會分成 char array, char pointer 介紹。

這篇文章也是將我另一篇文章中的「互相轉換」獨立出來討論的內容,沒經驗者建議可以先參考前一篇文章。請見下文:

先講結論,我們先觀察以下程式碼與結果

建議先自己實際操作過後,會比直接看結論學得更快哦!

before→ / after↓Char arrayChar pointerStringstringstream
Char arraystrcpy(dst, src)strcpy(Char array, Char pointer)strcpy(Char array, String.c_str() )strcpy(Char array, stringstream.str().c_str())
Char pointerChar pointer = Char array 或 Char pointer = &Char array[0]xChar pointer = String.c_str()Char pointer = stringstream.str().c_str()
Stringstring = Char arrayString = Char pointerxString = stringstream.str()
stringstreamstringstream << Char arraystringstream << Char pointerstringstream << Stringx

從 Char array 出發,轉成其他的字串型態

可以特別注意在 Char array 轉換成 Char pointer 中,我們有兩種轉換方式,

  • 其中一種是直接將值傳入 「*p」(值) = 傳入值,
  • 另外一種是將位置傳入 = &s0[0] (string 的第 0 個位置)

範例程式碼

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
  char s0[30] = "Hello World!";
  char* s1 = s0;
  cout << s1 << endl;
  char* s2 = &s0[0];
  cout << s2 << endl;

  string s3 = s0;
  cout << s1 << endl;

  stringstream s4;
  s4 << s0;
  cout << s4.str() << endl;
  return 0;
}

編譯與結果

> g++ test4.cpp   -o a.out &&  ./a.out
Hello World!
Hello World!
Hello World!
Hello World!

從 Char pointer 出發,轉成其他的字串型態

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
  stringstream s0;
  s0 << "Hello World!";

  char s1[30];
  strcpy(s1, s0.str().c_str());
  cout << s1 << endl;

  const char *s2 = s0.str().c_str();
  cout << s2 << endl;

  string s3 = s0.str();
  cout << s3 << endl;
  return 0;
}

編譯與結果

> g++ test4.cpp   -o a.out &&  ./a.out
Hello World!
Hello World!
Hello World!

從 String 出發,轉成其他的字串型態

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
  string s0 = "Hello World!";

  char s1[30];
  strcpy(s1, s0.c_str());
  cout << s1 << endl;

  const char *s2 = s0.c_str();
  cout << s2 << endl;

  stringstream s3;
  s3 << s0;
  cout << s3.str() << endl;

  return 0;
}

編譯與結果

> g++ test4.cpp   -o a.out &&  ./a.out
Hello World!
Hello World!
Hello World!

從 stringstream 出發,轉成其他的字串型態

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
  stringstream s0;
  s0 << "Hello World!";

  char s1[30];
  strcpy(s1, s0.str().c_str());
  cout << s1 << endl;

  const char *s2 = s0.str().c_str();
  cout << s2 << endl;

  string s3 = s0.str();
  cout << s3 << endl;

  return 0;
}

編譯與結果

> g++ test4.cpp   -o a.out &&  ./a.out
Hello World!
Hello World!
Hello World!

Reference

⭐C++ 基礎用法 相關文章整理⭐:
1.【C++】C++ compile 程式碼 使用 c++ 11 與使用相關的 package
2.【C++】C/C++ 顯示資料的類別 (type) sample code (內含範例程式碼) print C data type, cout C++ data type, get variable type in c++
3.【C++】C++ 複製 2D array的方法 copy 2d array memcpy sample code (內含範例程式碼)
⭐C++ 字串處理相關文章整理⭐:
1.【C++】字串 char string stringstream 相關用法總整理 (內含範例程式碼) 與利用 sprinf, snprinf assign 值的方法
2.【C++】字串 char string stringstream 「轉換」用法總整理 (內含範例程式碼)
3.【C】printf, fprintf, sprintf, snprintf 相關用法總整理 (內含範例程式碼)
4.【C++】C++ String 用法 連接兩個 String c++ string concat
⭐C++ 系統偵測相關文章整理⭐:
1.【C++】C++ 利用 dirent.h 計算資料夾的檔案數量 count files sample code (內含範例程式碼)
2.【C++】C++ inotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
⭐C++ OpenCV 相關文章整理⭐:
1.【OpenCV】c++ OpenCV – 在 ubuntu 上第一次執行 OpenCV 程式 sample code (內含範例程式碼)
2.【OpenCV】c++ OpenCV - 在圖片上寫上文字 cv::putText sample code (內含範例程式碼)
3.【OpenCV】c++ OpenCV - cv::Rect 矩形用法與相關功能函數 sample code (內含範例程式碼)
4.【OpenCV】c++ OpenCV - OpenCV 中的純量 定義顏色 cv::Scalar(255,255,255) color sample code (內含範例程式碼)
5.【OpenCV】用 C++ 計算 iou 的方法 與網路算法常見錯誤(內附範例程式碼) sample code
⭐【喜歡我的文章嗎? 幫忙按讚除了鼓勵外,我也會將部分所得捐出!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免費註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,扣除掉網站本身經營的成本 (可惜目前還是虧本的),我會將 【50% 收益全部捐出】 並公開發文,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps