C++ で関数から文字列を返す方法

胡金庫 2023年10月12日
  1. C++ で関数から文字列を返すには std::string func() 記法を使用する
  2. 関数から文字列を返すには std::string &func() 記法を用いる
  3. 関数から文字列を返すために char *func() 記法を使用する
C++ で関数から文字列を返す方法

この記事では、C++ で関数から文字列を返す方法についていくつかの方法を説明します。

C++ で関数から文字列を返すには std::string func() 記法を使用する

関数から文字列オブジェクトを返すには、値で返すのが好ましい方法です。std::string クラスは move コンストラクタを持っているので、長い文字列も値で返すのが効率的です。オブジェクトが move コンストラクタを持つ場合、そのオブジェクトは move-セマンティクスを持つと言われています。移動セマンティクスは、関数の戻り時にオブジェクトが別の場所にコピーされないことを意味しており、関数の実行時間を短縮することができます。

#include <algorithm>
#include <iostream>
#include <iterator>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

string ReverseString(string &s) {
  string rev(s.rbegin(), s.rend());
  return rev;
}

int main() {
  string str = "This string shall be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

出力:

This string shall be reversed
desrever eb llahs gnirts sihT

関数から文字列を返すには std::string &func() 記法を用いる

このメソッドは参照による戻り値を使用していますが、これはこの問題に対する代替的なアプローチとなります。参照による戻り値は、大きな構造体やクラスを返すための最も効率的な方法ですが、この場合、前のメソッドに比べて余分なオーバーヘッドは発生しません。関数内で宣言されたローカル変数を参照で置き換えるべきではないことに注意してください。

#include <algorithm>
#include <iostream>
#include <iterator>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

string &ReverseString(string &s) {
  reverse(s.begin(), s.end());
  return s;
}

int main() {
  string str = "Let this string be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

出力:

Let this string be reversed
desrever eb gnirts siht teL

関数から文字列を返すために char *func() 記法を使用する

あるいは、関数から文字列オブジェクトを返すために char * を使用することもできます。std::string クラスは文字を連続した配列として格納していることを覚えておいてください。したがって、組み込みの data() メソッドを呼び出すことで、その配列の最初の char 要素へのポインタを返すことができます。ただし、std::string オブジェクトのヌル文字配列を返す際には、同様の c_str() メソッドを使わないように注意してください。

#include <algorithm>
#include <iostream>
#include <iterator>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

char *ReverseString(string &s) {
  reverse(s.begin(), s.end());
  return s.data();
}

int main() {
  string str = "This string must be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

出力:

This string must be reversed
desrever eb tsum gnirts sihT
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ String