C++で文字列(std::string)をchar配列に変換する3つの方法
C++では、std::string型の文字列をchar型の配列(C言語形式の文字列)に変換したい場面がよくあります。たとえば、C言語のライブラリ関数を呼び出すときや、低レベルな文字列操作を行うときなどです。この記事では、代表的な3つの変換方法をアルゴリズムとサンプルコード付きで解説します。
方法1:ループで1文字ずつコピーする
アルゴリズム
Begin
文字列 m に値を代入する
i = 0 から sizeof(m) まで繰り返す
char配列へ1文字ずつコピーして出力する
End
サンプルコード
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char m[] = "Tutorialspoint";
string str;
int i;
for(i=0;i<sizeof(m);i++) {
str[i] = m[i];
cout<<str[i];
}
return 0;
}
この方法は、char配列の各要素にインデックスでアクセスしながら順番に処理する、最も基本的なアプローチです。
方法2:strcpy()関数を使う
strcpy()関数を呼び出すだけで、文字列の内容をchar配列へまとめてコピーできます。C言語から引き継がれた古典的な手法です。c_str()メソッドを使うことで、std::stringからNULL終端されたC形式の文字列ポインタを取得できます。
アルゴリズム
Begin 文字列 s に値を代入する strcpy() を使って文字列の内容をchar配列にコピーする End
サンプルコード
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
string str = "Tutorialspoint";
char c[str.size() + 1];
strcpy(c, str.c_str());
cout << c << '\n';
return 0;
}
実行結果
Tutorialspoint
配列サイズを str.size() + 1 としているのは、文字列末尾のNULL終端文字('\0')分の領域を確保するためです。
方法3:std::string::copy()を使う
C言語由来の strcpy() を使いたくない場合は、C++の std::string クラスが提供する copy() メンバ関数を利用できます。こちらの方がC++らしい書き方といえます。
アルゴリズム
Begin 文字列 s に値を代入する copy() を使って文字列の内容をchar配列にコピーする End
サンプルコード
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Tutorialspoint";
char c[str.size() + 1];
str.copy(c, str.size() + 1);
c[str.size()] = '\0';
cout << c << '\n';
return 0;
}
実行結果
Tutorialspoint
copy()はNULL終端文字を自動的に付加しないため、コピー後に c[str.size()] = '\0'; として明示的に終端文字を設定している点に注意してください。
まとめ
文字列をchar配列に変換する方法として、①ループによる1文字ずつのコピー、②strcpy()を使う方法、③std::string::copy()を使う方法の3つを紹介しました。手軽さではstrcpy()、C++らしさではcopy()がおすすめです。なお、可変長配列(VLA)は標準C++の機能ではないため、移植性を重視する場合はnewやstd::vector<char>でバッファを確保するとよいでしょう。
-
PHPで配列を文字列に変換する方法【implode()関数の使い方】
PHPで配列を文字列に変換するには、implode()関数を使用します。この関数は、配列の各要素を指定した区切り文字で連結し、一つの文字列として返してくれます。implode()関数の基本構文implode(string $separator, array $array): string$separator:配列の要素をつなげる際に挟む区切り文字(省略可能ですが、指定することが推奨されています)$array:文字列に変換したい配列基本的な使用例まず、次のような配列があるとします。$sentence = array(My, Name, is, John);この配列をスペース区切りの文字列に変換し
-
C#で整数配列を文字列配列に変換する方法:ConvertAllメソッドの使い方
はじめに C#で整数型の配列(int[])を文字列型の配列(string[])に変換するには、Array.ConvertAllメソッドを使用します。このメソッドは、元の配列の各要素に対して指定した変換処理を適用し、その結果からなる新しい配列を返してくれます。 整数配列の準備 まず、変換元となる整数配列を用意します。 int[] intArray = new int[5]; // 5つの要素を持つ整数配列 intArray[0] = 15; intArray[1] = 30; intArray[2] = 44; intArray[3] = 50; intArray[4] = 66; Con