Chapter 13 String
String
は、CharacterVector
の要素に対応するスカラー型です。String
は C の文字列 char*
や C++ の文字列 std::string
では対応していない NA 値(NA_STRING
)も扱うことができます。
13.1 String オブジェクトの作成
String
型のオブジェクトの作成方法には、大別して、C/C++の文字列から作成する方法、別の String
オブジェクトから作成する方法、長さが文字列ベクトルの1つの要素から作成する方法、の3通りの方法があります。また、文字コードも合わせて指定することができます。
13.2 演算子
String
には +=
演算子が定義されています。これにより文字列の末尾に別の文字列を結合できます。 ( +
演算子は定義されてないので注意してください)
// String オブジェクトの作成
String s("A");
// 文字列を結合します
s += "B";
Rcout << s << "\n"; //"AB"
13.3 メンバ関数
注:メンバ関数 replace_first()
, replace_last()
, replace_all()
は単に文字を置き換えた文字列を返すわけではなく、このオブジェクトの値をそのものを書き換えます。
13.3.1 replace_first( str, new_str)
この String オブジェクトの中で文字列 str と一致する最初に見つけた部分文字列を文字列 new_str に置き換えます。
13.3.2 replace_last( str, new_str)
この String オブジェクトの中で、文字列 str と一致する最後に見つけた部分文字列 str を 文字列 new_str に置き換えます。
13.3.3 replace_all( str, new_str)
この String オブジェクトの中で、文字列 str と一致する全ての部分文字列 str を 文字列 new_str に置き換えます。
13.3.4 push_back(str)
この String オブジェクトの末尾に文字列 str を結合します。( += 演算子と同じ機能)
13.3.5 push_back(str)
この String オブジェクトの先頭に文字列 str を結合します。
13.3.6 set_na()
NA 値をセットします。
13.3.7 get_cstring()
String オブジェクトの文字列を C 言語の文字列定数(const char*)に変換して返します。
13.3.8 get_encoding()
cetype_t
で表される文字コードを返します。
13.3.9 set_encoding(enc)
enc
(cetype_t
)で指定する文字コード設定します。
13.3.10 コード例
以下のコードでは、“abcdabcd” という文字列に対して、“ab” を “AB” に置換する処理を以下の3通りの方法で実行しています。
(1) “ab” が初めて出現する箇所でのみ置換 (replace_first()
メンバ関数)
(2) “ab” が最後に出現する箇所でのみ置換 (replace_last()
メンバ関数)
(3) “ab” が出現するすべての箇所で置換 (replace_all()
メンバ関数)
なお、メンバ関数 replace_first()
, replace_last()
, replace_all()
は単に文字を置き換えた文字列を返すわけではなく、このオブジェクトの値をそのものを書き換えます。
// [[Rcpp::export]]
void rcpp_replace(){
//"ab" が初めて出現する箇所でのみ置換します
String s("abcdabcd");
s.replace_first("ab", "AB");
Rcout << s.get_cstring() << "\n"; // ABcdabcd
//"ab" が最後に出現する箇所でのみ置換します
s="abcdabcd";
s.replace_last("ab", "AB");
Rcout << s.get_cstring() << "\n"; // abcdABcd
//"ab" が出現するすべての箇所で置換します
s="abcdabcd";
s.replace_all("ab", "AB");
Rcout << s.get_cstring() << "\n"; // ABcdABcd
}
実行結果
> rcpp_string()
ABcdabcd
ABcdabcd
abcdaABd
ABcdABcd