0Pricing
C++ Academy · レッスン

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);  // 5

std::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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. std::stringとC形式のchar配列
  2. 文字列操作:concat、substr、find、replace
  3. 解析のための文字列ストリームstringstream
  4. 文字列変換:to_stringとstoi
← C++ Academyに戻る