C++_文字・文字列の取り扱い

配列ポインタとかよく分からない。ただのコピペ。

 

char 型

C 言語では文字を取り扱う場合に、char 型を利用する。

char 型の変数のサイズは 1 バイトなので、
1 つの変数には 1 文字しか格納できない。記述する時は 'A' と ' を使用。
1 バイト = 8 ビット。1 bit は 0 か 1 。二者択一。

文字列の場合は、
char 型配列を利用する。配列のサイズは、変数を宣言するときに決め
文字列の最後ヌル文字 \0 を入れる必要がある。

ダブルクオーテーションマークで変数を作成する場合は、
自動的ヌル文字が文字列の終端に挿入されるが、
シングルクオーテーションマークの場合は自動的に挿入されない

    char str1[ ] = "hoge"; // sizeof で出力すると 5
    char str2[ ] = {'h', 'o', 'g', 'e', '\0'}; // sizeof で出力すると 5

上記二つは同一の文字列に初期化される。

 

 

char 型ポインタ

文字列を扱うには、char 型のポインタを利用することも可。

    const char* char_ptr = "hoge";

 

 

string 型

C++ では string 型を利用すると文字の取り扱いが便利。

ex ) #include <string> 必要。

    std::string str1 = "hoge";
    std::string str2 = "fuga";
    std::string str3 = str1 + str2; // 連結は + 演算子を利用
   
    std::cout << str3 << std::endl; // hogefuga
   
    // 文字にアクセス
    std::cout << str1[0] << std::endl; // h
   
    // 文字列の長さ
    int str1Len = str1.size(); // 5

 

 

文字列リテラル

ダブルクォートで囲まれた文字の連続。その型は適切な数の const char配列

    // カーソル置いたら、
    char str1[ ] = "hoge"; // "hoge" は const char[5]
    auto foo = "fuga"; // foo は const char *foo: "fuga" は const char[5]

 

C との互換性のために、文字リテラルchar*代入できる
しかし、実体は const char* であるので、型を変更する必要がある。

    char* p = "ABC";
    p[0] = 'X'; // アクセス違反
    *p = 'X';   // アクセス違反
   
    // 変更
    char p[ ] = "ABC";
    p[0] = 'X';

 

ワイド文字リテラルは「 L 」という接頭辞を付けて表現。
L" 文字列 "

    wchar_t* str = L"HogeFuga";

 

エスケープされない文字列。
エスケープが必要な文字を、エスケープせずに記述できる。
R " ( 文字列 ) "

    char s1[ ] = R"("A")"; // "A"

 

 

 

こちらから。
https://bi.biopapyrus.jp/cpp/syntax/string.html
https://so-zou.jp/software/tech/programming/cpp/grammar/pointer/array.htm#string-literal
http://www.kis-lab.com/serikashiki/C/C03.html
↓数値から std::string 型変換
http://marycore.jp/prog/cpp/convert-number-to-string/
↓char 型から  std::string 型に変換
http://marycore.jp/prog/cpp/convert-char-to-string/

以上。

--Memo--
sizeof : 使い方は 2 種類ある。
sizeof(型)
型が利用するメモリサイズを返す。
ex)
    sizeof(int); // int は 4byte なので 4。
sizeof 変数
変数だけでなく定数や式でも可。
ex)
    int a[10];
    sizeof a; // 10 。要素数を返している。