std::stringとC形式のchar配列
現代的なstd::stringと従来のNULL終端char配列を比較し、それぞれを使う場面を判断します。
「std::stringとC形式のchar配列」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
テキストを保持する2つの方法
C++には、null終端されたchar配列であるC形式の文字列が受け継がれており、標準ライブラリにはstd::stringが追加されています。ほとんどの場合、std::stringを使用してください。
C形式の文字列
C形式の文字列は、nullバイト'\0'で終わるcharの並びです。strlenのような関数は、nullを見つけるまで配列をたどります。
const char* greeting = "Hello";
// Memory: H, e, l, l, o, \0 (6 bytes)
#include <cstring>
std::cout << std::strlen(greeting); // 5std::string
std::stringは自身のメモリを管理し、必要に応じて拡張します。他の型と同じように構築できます。
#include <string>
std::string name = "Ada";
name += " Lovelace";
std::cout << name; // Ada Lovelaceサイズと長さ
std::string::size()とlength()は同義で、文字数を返します(null終端文字は含みません)。
std::string s = "hello";
std::cout << s.size(); // 5
std::cout << s.length(); // 5インデックスによるアクセス
[]またはat()を使って文字を読み書きできます。[]とは異なり、at()はインデックスが範囲外の場合に例外をスローします。
std::string s = "cat";
char first = s[0]; // 'c'
char last = s.at(2); // 't'
// s.at(10) throws std::out_of_range空の文字列
size() == 0の代わりにempty()を使用します。より明快で、速度も同じです。
const char*を使う場面
次のような場合はC形式の文字列を使用します。
- CライブラリまたはオペレーティングシステムのAPIと連携する場合
- 変更されない文字列リテラルを扱う場合
- 標準ライブラリを利用できない組み込みシステムの場合
相互変換
std::stringから.c_str()を使ってC文字列を取得できます。const char*からstd::stringを直接構築できます。
std::string s = "Hello";
const char* c = s.c_str();
const char* literal = "world";
std::string s2(literal);文字列リテラルはconst char[]
"hi"のような文字列リテラルの型はconst char[3]です(null終端文字を含みます)。読み取り専用メモリに格納されます。
raw文字列リテラル
R"(...)"を前に付けると、エスケープ処理を省略できます。正規表現パターンやファイルパスに便利です。
std::string regex = R"(\d+\.\d{2})";
std::string path = R"(C:\Users\Ada)";std::stringの反復処理
文字列はコンテナです。範囲ベースfor、インデックス、またはイテレーターを使って反復処理できます。
std::string s = "abc";
for (char c : s) std::cout << c << " "; // a b c確認問題
インデックスが範囲外の場合に例外をスローするstd::stringのメソッドはどれですか。
まとめ
管理されたテキストにはstd::stringを優先してください。リテラルやC APIとの連携にはconst char*を使用します。.c_str()と直接構築によって相互変換できます。
よくある質問
「std::stringとC形式のchar配列」レッスンは無料ですか?
はい。「std::stringとC形式のchar配列」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「std::stringとC形式のchar配列」で何を学びますか?
現代的なstd::stringと従来のNULL終端char配列を比較し、それぞれを使う場面を判断します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「std::stringとC形式のchar配列」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::stringとC形式のchar配列
- 文字列操作:concat、substr、find、replace
- 解析のための文字列ストリームstringstream
- 文字列変換:to_stringとstoi