C++で追加されたstring型ですが、C言語から使われている関数には使えない場合があります。
そこで、stringにはC言語で文字列を表現するときに使われるchar*型に変換するc_str関数が用意されています。
今回は、
- string型とchar型の違い
- c_strでstring型からchar*型に変換
- コンストラクタでchar*型からstring型に変換
- char型の配列からstring型に変換
- char*型の部分文字列をstring型に変換
などの応用的な使い方についても解説します。
string型とchar*型の違い
char*型とは
char*型を使うことで文字列を宣言することができます。
char c = 'a';
のように使うことで、1文字を表現することができます。
そして*(アスタリスク)をつけることで文字の配列、つまり文字列を扱うことができます。
「” “」(ダブルクォーテーション)で囲って表現することができます。
char* cstr = "Hello, engineer";
詳しくはこちらをご覧ください。
string型とは
C++からはstringというライブラリをインクルードすることでstringクラスを使うことができます。stringクラスには便利な関数が用意されているため文字列をより簡単に扱うことができるようになりました。
そのためC++では文字列を扱う時には、string型を使うのが一般的になります。
c_strでstring型からchar*型に変換
printf関数などのC言語から存在する関数はchar*型を引数に取ります。そのためそのままではstring型の変数を使うことができません。
そこでc_str関数を使いstring型の変数をchar*型に変換することができます。
次のプログラムで確認してみましょう。
#include <stdio.h> #include <string> int main() { std::string str = "Samurai juku"; printf("%s\n", str.c_str()); }
実行結果:
Samurai juku
コンストラクタでchar*型からstring型に変換
コンストラクタを使うことでchar*型の文字列からstring型に変換することができます。コンストラクタとは変数を宣言する際に呼ばれる関数のことです。
以下のように宣言することができます。
const char* samurai = "samurai, engineer"; std::string str1 = samurai; std::string str2(samurai); std::string str3 { samurai }; std::string str3; str3 = samurai;
次のプログラムで確認してみましょう。
#include <iostream> #include <string> int main() { const char *cstr = "hello, engineer!"; std::string str = cstr; std::cout << str << std::endl; }
実行結果:
hello, engineer!
char型の配列からstring型に変換
char型の配列についても同じように変換することができます。
次のプログラムで確認してみましょう。
#include <iostream> #include <string> int main() { const char *cstr = "hello, programmer!"; std::string str = cstr; std::cout << str << std::endl; }
実行結果:
hello, programmer!
char*型の部分文字列をstring型に変換
char*型の部分的な文字列をstring型に変換することができます。
宣言する方法は以下のようになります。
const char* cstr = "samurai"; std::string str(cstr, 取り出す長さ); std::string str(cstr, 開始位置, 取り出す長さ);
次のプログラムで確認してみましょう。
#include <iostream> #include <string> int main() { const char *cstr = "hello, engineer!"; std::string str1(cstr, 5); std::string str2(cstr, 7, 14); std::cout << "str1:" << str1 << std::endl << "str2:" << str2 << std::endl; }
実行結果:
str1:hello str2:engineer!
まとめ
いかがだったでしょうか?
今回はstring型とchar*型の文字列を相互に変換する方法を解説しました。
C言語の関数を使いたいときや、char*型をstring型の文字列に変換したいときなどに使ってみてください。もし、string型を変換する方法を忘れてしまったらこの記事を確認してください。