C++
 Computer >> コンピューター >  >> プログラミング >> C++

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++の機能ではないため、移植性を重視する場合はnewstd::vector<char>でバッファを確保するとよいでしょう。

  1. PHPで配列を文字列に変換する方法【implode()関数の使い方】

    PHPで配列を文字列に変換するには、implode()関数を使用します。この関数は、配列の各要素を指定した区切り文字で連結し、一つの文字列として返してくれます。implode()関数の基本構文implode(string $separator, array $array): string$separator:配列の要素をつなげる際に挟む区切り文字(省略可能ですが、指定することが推奨されています)$array:文字列に変換したい配列基本的な使用例まず、次のような配列があるとします。$sentence = array(My, Name, is, John);この配列をスペース区切りの文字列に変換し

  2. 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