C++ で関数から文字列を返す方法
胡金庫
2023年10月12日
-
C++ で関数から文字列を返すには
std::string func()
記法を使用する -
関数から文字列を返すには
std::string &func()
記法を用いる -
関数から文字列を返すために
char *func()
記法を使用する
この記事では、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
著者: 胡金庫