<C++>文字列と文字列操作
今回の記事でわかること
- C言語的な文字列(C文字列)の使い方
- std::string の基本と便利な操作
- 文字列を扱うときの注意点
文字列とは
文字の並びを表すデータ型を文字列と呼び、C++ では大きく分けて2種類あります
C文字列
- char 型の配列で表現
- \0 (ヌル文字)で終端を表す
- C言語から受け継いだ方法
std::string
- C++ 標準ライブラリの文字列型
- 長さを自動管理してくれる
- 直感的で安全に使える
C文字列の基本
C言語と同じく char[] とヌル文字で表現される。扱いが面倒で初心者はバグりやすい印象
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[20] = "Hello";
cout << str << endl;
strcat(str, " World"); // 文字列を連結
cout << str << endl;
cout << "length = " << strlen(str) << endl;
return 0;
}
/* 出力結果
Hello
Hello World
length = 11
*/
C++ 文字列(std::string)
C++ なら、基本は std::string を使うのがおすすめで、長さも自動で管理される上、演算子や関数が便利です
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "Hello";
cout << s << endl;
s += " World"; // 連結(+ や += が使える)
cout << s << endl;
cout << "length = " << s.size() << endl; // 長さ取得
cout << "substr = " << s.substr(0, 5) << endl; // 部分文字列
cout << "find = " << s.find("World") << endl; // 検索(インデックス返す)
return 0;
}
/* 出力結果
Hello
Hello World
length = 11
substr = Hello
find = 6
*/
文字列の入出力
std::cin と std::getline の違いに注意!!!
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "名前を入力してください: ";
getline(cin, name); // スペースを含めて読み込み
cout << "こんにちは, " << name << " さん!" << endl;
return 0;
}
/* 実行例
名前を入力してください: 〇〇
こんにちは, 〇〇 さん!
*/