1-15. 文字列

公開日: 16:20 1. 基本編/1-15. 文字列


C++の文字列表現には次の2つの方法があります。 
  • Cスタイルのchar型文字列
  • C++で導入されたstringクラス型

Cスタイルのchar型文字列

Cスタイルのchar型文字列はC言語で始まり、C++でもサポートが続いています。この文字列は実際はchar型の1次元の配列であり、null文字'\0'で終わります。

次の宣言と初期化は"Hello"という単語の文字列を作成します。null文字を配列の最後に保持するため、char型配列のサイズは"Hello"の文字数より1つ大きくなります。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
配列の初期化のルールに従うのであれば、上の構文を次のように書くことができます。
char greeting[] = "Hello";

C/C++での文字列表現

実際には、自身で文字列の最後にnull文字を書くことはありません。C++コンパイラは配列を初期化するときに自動的に'\0'を文字列の最後に入れます。上の例を出力してみましょう。
#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文字で終わる文字列を操作する関数を幅広くサポートしています。
構文説明
double strcpy(s1,s2);s2をs1にコピー
double strcat(s1,s2);s1の後ろにs2を連結
double strlen(s1);s1の長さを返す
double strcmp(s1,s2);s1とs2が同じであれば0、s1s2であれば正の値を返す
double strchr(s1,ch);文字chが最初に現れる文字列s1内のポインタを返す
double strstr(str1,str2);文字列s2が最初に現れる文字列s1内のポインタを返す

以下は上記の関数の仕様の使用例です。
#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++での文字列クラス

標準C++ライブラリはこれまで述べてきた命令をすべてサポートする文字列クラス型を備えており、加えて、より機能的です。

クラスとオブジェクトについて説明していないので次の例を理解できないかもしれません。オブジェクト指向の概念を理解するまで先に進めても構いません。
#include <iostream>
#include <string>

using namespace std;

int main ()
{
   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;

   // copy 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
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿