C++のstringクラスの使い方について詳しく解説

C++には、文字列を扱うためのstringクラスがあります。

このクラスは、C言語の文字列処理関数よりも使いやすく、安全性が高いとされています。本記事では、stringクラスの基本的な使い方から応用的な機能までをわかりやすく解説します。

目次

stringクラスとは

stringクラスは、C++の標準ライブラリで提供される文字列を扱うためのクラスです。

C言語では文字列をchar型の配列として扱っていましたが、stringクラスを使うことでより簡単かつ安全に文字列を扱うことができます。

stringクラスは、<string>ヘッダファイルをインクルードすることで使用することができます。また、stdという名前空間に属しています。

以下は、stringクラスを使ったサンプルコードです。

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    std::cout << str << std::endl;
    return 0;
}

このコードでは、"Hello, world!"という文字列をstr変数に代入し、その後std::coutで出力しています。

stringクラスの基本的な使い方

C++にはstringクラスがあり、文字列を扱う際に便利です。ここでは、stringクラスの基本的な使い方について説明します。

stringオブジェクトの生成

stringオブジェクトを生成するには、以下のように記述します。

#include <string>

int main() {
    std::string str;
    return 0;
}

stringオブジェクトの初期化

stringオブジェクトを初期化する方法は複数あります。以下に代表的なものを紹介します。

デフォルトコンストラクタ

デフォルトコンストラクタを使用して初期化する場合、以下のように記述します。

std::string str = std::string();

文字列リテラルから初期化

文字列リテラルから初期化する場合、以下のように記述します。

std::string str1 = "";
std::string str2 = "Text";

別のstringオブジェクトから初期化

別のstringオブジェクトから初期化する場合、以下のように記述します。

std::string str1 = "こんにちは";
std::string str2 = str1;

stringオブジェクトへの代入

既存のstringオブジェクトに新しい値を代入する場合、以下のように記述します。

std::string str1 = "こんにちは";
str1 = "新しい文字列";

stringオブジェクト同士の比較

二つのstringオブジェクトが等しいかどうか比較する場合、以下のように記述します。

std::string str1 = "こんにちは";
std::string str2 = "さようなら";
// == で比較できる
bool result = str1 == str2;

また、大小関係を比較する場合は以下のように記述します。

//文字列の長さではなく文字コード順で判定される
if (str1 < str2) {
    std::cout << "str1 is less than str2" << std::endl;
} else if (str1 > str2) {
    std::cout << "str1 is greater than str2" << std::endl;
} else {
    std::cout << "str1 and str2 are equal" << std::endl;
}

文字列の大小の比較は、漢字の読みを考慮しない単純なソートで役立ちます。

以上が、C++で文字列を扱うために必要な基本的な操作です。

stringクラスのメソッド

stringクラスには、文字列を操作するための様々なメソッドが用意されています。ここでは、文字列の操作、検索、変換についていくつか紹介します。

文字列の操作

文字列の連結

+演算子を使用することで、2つのstringオブジェクトを連結することができます。

#include <string>
using namespace std;

int main() {
    std::string str1 = "Hello";
    std::string str2 = "World";
    std::string result = str1 + " " + str2; // "Hello World"
    return 0;
}

また、+=演算子を使用することで、既存のstringオブジェクトに別の文字列を追加することもできます。

std::string str = "Hello";
str += " World!";

文字列の挿入

insert()メソッドを使用することで、指定した位置に文字列を挿入することができます。

std::string str = "Hello";
//3文字目(先頭は0文字目)の位置に文字列を挿入する
str.insert(3, " World"); // "Hel Worldlo"

文字列の削除

erase()メソッドを使用することで、指定した位置から指定した長さ分だけ文字列を削除することができます。

std::string str = "Hello World";
//5文字目(先頭は0文字目)から6文字削除する
str.erase(5, 6); // "Hello"

文字列の置換

replace()メソッドを使用することで、指定した位置から指定した長さ分だけ文字列を別の文字列に置換することができます。

std::string str = "Hello World";
6文字目(先頭は0文字目)から5文字分を置換する
str = str.replace(6, 5, ", C++"); // "Hello , C++"

文字列の検索

文字列の検索

find()メソッドを使用することで、指定した文字列が最初に現れる位置を取得することができます。見つからなかった場合はnpos(std::string::npos)が返ります。

std::string str = "Hello World";
size_t pos = str.find("World"); // 6

文字列の切り出し

substr()メソッドを使用することで、指定した位置から指定した長さ分だけ文字列を切り出すことができます。

std::string str = "Hello World";
std::string sub_str = str.substr(6, 5); // "World"

文字列の変換

大文字・小文字の変換

toupper()メソッドやtolower()メソッドを使用することで、大文字や小文字に変換することができます。

char c = 'a';
c = toupper(c); // 'A'

char d = 'B';
d = tolower(d); // 'b'

数値の変換

C++11以降では、以下のような方法でも数値型からstd::string型へ変換可能です。また逆にstd::stoi() std::stod() std::to_string()関数などを使うことで、数値⇔文字列を相互変換可能です。

std::string str1 = std::to_string(123);
std::string str2 = std::to_string(4.56);
std::cout << str1 + "," + str2 << std:endl;
123,4.56

以上がC++プログラミング言語における基本的なStringクラス及びその使い方です。

stringクラスの注意点

stringクラスを使用する際には、以下のような注意点があります。

stringクラスの文字列の長さ

stringクラスでは、文字列の長さを取得するためにsize()length()といったメソッドが用意されています。

しかし、これらのメソッドは文字数ではなくバイト数を返します。

そのため、マルチバイト文字やUTF-8エンコーディングなどで使用した場合には注意が必要です。

stringクラスの文字列のエスケープ

stringクラスでは、特殊な文字(例えば改行やタブ)を表すエスケープシーケンス(\n\t)が使用できます。

しかし、これらのエスケープシーケンスはC言語と同様に扱われるため、バックスラッシュ(\)自体もエスケープされる必要があります。例えば、「\n」は改行を表し、「\\」はバックスラッシュ自体を表します。

以上がstringクラスを使用する際に気をつけるべき注意点です。適切な使い方を心掛けてプログラム開発に役立てましょう。

目次