#8 C++で学ぶ文字列操作の基本
C++の文字列操作は、`std::string`という型を使うのが現代的な基本の書き方です。この記事では、C++における文字列操作の基本と、注意しておきたい落とし穴を解説します。
文字列を連結する
std::string greeting = "こんにちは、" + name + "さん";
`std::string`同士であれば、`+`を使った連結がそのまま使えます。既存の文字列に追加する場合は`+=`や`append`メソッドも使えます。
greeting += "。よろしくお願いします。";
よく使う文字列操作
name.length()文字数を調べる(バイト数であることに注意、後述)name.substr(0, 3)一部分を取り出す(開始位置と長さを指定)name.find("A")特定の文字の位置を探す(見つからなければ`std::string::npos`)name.replace(0, 2, "XX")一部分を置き換える
文字列を数値に変換する
文字列を数値に変換したい場合は`std::stoi`(整数)や`std::stod`(小数)、逆に数値を文字列にしたい場合は`std::to_string`を使います。
int num = std::stoi("123");
std::string s = std::to_string(456);
文字列を分割する
C++の標準ライブラリには、他言語の`split`のような文字列分割の関数が長らく用意されていませんでした。`std::stringstream`を使うのが伝統的な方法です。
#include <sstream>
std::stringstream ss("a,b,c");
std::string item;
while (std::getline(ss, item, ',')) {
std::cout << item << std::endl;
}
C++ならではの注意点
C++には、古くからある`char`の配列を使った文字列の扱い方と、現代的な`std::string`を使った扱い方の両方が存在します。古い書き方は`+`による連結ができないなど制約が多いため、特別な理由がない限り、`std::string`を使うことが強く推奨されています。学習中に見かける情報が、どちらの書き方を前提にしているか意識しておきましょう。また、`length()`が返すのはあくまでバイト数であり、日本語のようなマルチバイト文字を含む文字列では「文字数」とは一致しない点にも注意が必要です。日本語を正確に1文字ずつ扱いたい場合は、UTF-8を意識したライブラリを別途検討する必要があります。
まとめ
C++の文字列操作は`std::string`を使うのが基本です。数値との相互変換には`stoi`/`to_string`、分割には`stringstream`が使えます。古い書き方との違いや、マルチバイト文字の扱いにも注意しながら、現代的な機能を活用しましょう。
コメント
コメントを投稿