工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++文字列完全マスター:Cスタイル文字列 vs std::string

C++には以下の2種類の文字列表現があります:

Cスタイル文字列

Cスタイル文字列はC言語で誕生し、C++でも引き続きサポートされています。この文字列は実際には、null 文字 '\0' で終了する1次元の文字配列です。したがって、null終端文字列は、文字列を構成する文字に続いて null が続きます。

以下の宣言と初期化は、"Hello" という単語で構成される文字列を作成します。配列の末尾に null 文字を保持するため、文字列 "Hello" の文字数より1つ大きいサイズの文字配列が必要です。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

配列初期化のルールに従うと、上記文は以下のようにも書けます:

char greeting[] = "Hello";

上記で定義した文字列のC/C++でのメモリ表現:

C++文字列完全マスター:Cスタイル文字列 vs std::string

実際には、文字列定数の末尾に null 文字を置く必要はありません。C++コンパイラは、配列を初期化する際に自動的に末尾に '\0' を配置します。上記文字列を出力してみましょう:

Live Demo
#include <iostream>
using namespace std;
int main () {
    char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    cout << "Greeting message: ";
    cout << greeting << endl;
    return 0;
}

上記コードをコンパイルして実行すると、以下の結果が得られます:

Greeting message: Hello

C++は、null終端文字列を操作する幅広い関数をサポートしています:

No.関数と目的
1

strcpy(s1, s2);

文字列s2を文字列s1にコピーする。

2

strcat(s1, s2);

文字列s2を文字列s1の末尾に連結する。

3

strlen(s1);

文字列s1の長さを返す。

4

strcmp(s1, s2);

s1とs2が同一なら0、s1<s2なら0未満、s1>s2なら0より大きい値を返す。

5

strchr(s1, ch);

文字列s1内で文字chが最初に出現する位置へのポインタを返す。

6

strstr(s1, s2);

文字列s1内で文字列s2が最初に出現する位置へのポインタを返す。

上記関数のいくつかを使用した例:

Live Demo
#include <iostream>
#include <cstring>
using namespace std;
int main () {
    char str1[10] = "Hello";
    char str2[10] = "World";
    char str3[10];
    int len ;
    // str1をstr3にコピー
    strcpy( str3, str1);
    cout << "strcpy( str3, str1) : " << str3 << endl;
    // str1とstr2を連結
    strcat( str1, str2);
    cout << "strcat( str1, str2): " << str1 << endl;
    // 連結後のstr1の総長
    len = strlen(str1);
    cout << "strlen(str1) : " << len << endl;
    return 0;
}

上記コードをコンパイルして実行すると、以下のような結果が得られます:

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

C++の string クラス

標準C++ライブラリは、上記すべての操作をサポートし、さらに多くの機能を提供する string クラス型を提供しています。次の例を見てみましょう:

Live Demo
#include <iostream>
#include <string>
using namespace std;
int main () {
    string str1 = "Hello";
    string str2 = "World";
    string str3;
    int len ;
    // str1をstr3にコピー
    str3 = str1;
    cout << "str3 : " << str3 << endl;
    // str1とstr2を連結
    str3 = str1 + str2;
    cout << "str1 + str2 : " << str3 << endl;
    // 連結後のstr3の総長
    len = str3.size();
    cout << "str3.size() : " << len << endl;
    return 0;
}

上記コードをコンパイルして実行すると、以下のような結果が得られます:

str3 : Hello
str1 + str2 : HelloWorld
str3.size() : 10

C言語

  1. C# 文字列をマスターする:基礎、操作、高度なテクニック
  2. C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
  3. C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
  4. C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
  5. C++変数とデータ型:int、double、char、string、boolを徹底解説
  6. C++文字列関数をマスター:strcpy、strcat、strlen、strcmpの実践例
  7. C 言語の文字列をマスター: 宣言、入力、出力、ライブラリ関数
  8. C++プログラミング言語:概要と主要機能
  9. Java文字列をマスター:生成、メソッド、ベストプラクティス
  10. Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
  11. Java Stringクラス完全ガイド:生成、操作、主要メソッド46選