8.2 文字列の基本操作

番号 以下をクリックすると,該当箇所にジャンプします
(1) 文字列の長さ
(2) 文字列からの文字の探索
(3) 文字列の比較

(1)文字列の長さ

文字列の最後はナル文字です。
ですから,ナル文字を検索することで
文字列の長さを求めることができます。

  private int str_len(char[] ch)
  {
   int i=0;
   while(ch[i] != '\0') i++;
   return i;
  }

文字列を格納するための配列のサイズと
文字列の長さは必ずしも一致しません。

配列の大きさと文字列の長さの違いを
以下のプログラムで確認してみましょう。

  private void button3_Click(object sender, System.EventArgs e)
  {
    char[] CH =new char[12];
    CH[0]='文';CH[1]='字';CH[2]='列';
    CH[3]='s' ;CH[4]='t' ;CH[5]='r' ; CH[6]='i';
    CH[7]='n' ;CH[8]='g';CH[9]='\0';
    MessageBox.Show(CH.Length.ToString());  // 配列のサイズ=12
    MessageBox.Show(str_len(CH).ToString());  // 文字列の長さ=9
    MessageBox.Show(CharToString(CH).Length.ToString());                                           // 文字列の長さ=9
   }

なお,C++,C で文字列の長さを求めるには,strlen関数を用います。

番号 以下をクリックすると,該当箇所にジャンプします
(1) 文字列の長さ
(2) 文字列からの文字の探索
(3) 文字列の比較

(2)文字列からの文字の探索

文字列から任意の文字を探索する手続きは次のようになります。

  private int 文字探索(string X, char C)
  {
    int i=0;
    while (i < X.Length && X[i] !=C)i++;
    if(i < X.Length) return i;
    return -1;
  }

ただし,C#には,CやC++のstrchr,strrchrに相当する
以下のメソッドが用意されています。

(a) String.IndexOf

 特定の文字が文字列内で最初に出現する位置を返却します。
先頭は0,指定した文字が見つからない場合,−1を返します。
大文字と小文字は区別されます。

[例]以下の例では8と表示されます。

   string S = ”Peter Piper picked a peck";
   MessageBox.Show(S.IndexOf(’p'));

(b)String.LastIndexOf

指定した文字列が文字列内で最後に出現する位置を返却します。
先頭は0,指定した文字が見つからない場合,-1を返します。
大文字と小文字は区別されます。

[例]以下の例では,21と表示されます。

   string S = ”Peter Piper picked a peck";
   MessageBox.Show(S.LastIndexOf(’p'));


番号 以下をクリックすると,該当箇所にジャンプします
(1) 文字列の長さ
(2) 文字列からの文字の探索
(3) 文字列の比較

(3)文字列の比較

文字列S1,S2を比較し,S1が大きければ正の整数値,
小さければ負の整数値,等しければ0を返却する関数は
例えば,次のように記述することができます。

 private int str_cmp(string S1, string S2)
 {
  int i=0;
  while(i<S1.Length && i<S2.Length && S1[i]==S2[i]) i++;
  if (i== S1.Length && i== S2.Length) return 0;
  else if(I < S1.Length && I < S2.Length)
              return((int)S1[i]-(int)S2[i]);
  else if(i<S1.Length) return 1;
  else          return -1;
 }
 private void button5_Click
       (object sender, System.EventArgs e)
 {
   string S1 = textBox1.Text;
   string S2 = textBox2.Text;
   MessageBox.Show(str_cmp(S1,S2).ToString());
 }


文字列比較のメソッドもC#で用意されていますので,
通常は,わざわざプログラムを作る必要はありません。

たとえば,String.Compare メソッドでは, 2 つの文字列を比較します。
このメソッドでは,以下の結果を返却します。

(a) 引数1が引数2より大きいとき,正の整数
(b) 引数1が引数2より小さいとき,負の整数
(c) 引数1と引数2が等しいとき0

この他,CompareOrdinal ,CompareTo,Equals,StartsWith,
EndsWith などがあります。

詳しくはC#のマニュアルやヘルプを参照してください。


番号 以下をクリックすると,該当箇所にジャンプします
(1) 文字列の長さ
(2) 文字列からの文字の探索
(3) 文字列の比較


1. 基本的なアルゴリズム

2. 基本的なデータ構造

3. 操作を伴うデータ構造

4. 探索

5. 再帰的アルゴリズム

6. ソート

7. 集合

8. 文字列処理

9. 色々なアルゴリズム


上のタイトルをクリックします