Fortran-characters

提供:Dev Guides
移動先:案内検索

Fortran-文字

Fortran言語では、文字を単一の文字または連続した文字列として扱うことができます。

文字は、基本的な文字セット、つまり、文字、10進数、アンダースコア、21個の特殊文字から取られた任意の記号です。

文字定数は、固定値の文字列です。

組み込みデータ型 character は、文字と文字列を格納します。 文字列の長さは、 len 指定子で指定できます。 長さを指定しない場合、1です。 位置によって参照する文字列内の個々の文字を参照できます。左端の文字は位置1です。

キャラクター宣言

文字型データの宣言は他の変数と同じです-

type-specifier :: variable_name

例えば、

character :: reply, sex

次のような値を割り当てることができます

reply = ‘N’
sex = ‘F’

次の例は、文字データ型の宣言と使用を示しています-

program hello
implicit none

   character(len = 15) :: surname, firstname
   character(len = 6) :: title
   character(len = 25)::greetings

   title = 'Mr. '
   firstname = 'Rowan '
   surname = 'Atkinson'
   greetings = 'A big hello from Mr. Bean'

   print *, 'Here is ', title, firstname, surname
   print *, greetings

end program hello

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

Here is Mr. Rowan Atkinson
A big hello from Mr. Bean

文字の連結

連結演算子//は、文字を連結します。

次の例はこれを示しています-

program hello
implicit none

   character(len = 15) :: surname, firstname
   character(len = 6) :: title
   character(len = 40):: name
   character(len = 25)::greetings

   title = 'Mr. '
   firstname = 'Rowan '
   surname = 'Atkinson'

   name = title//firstname//surname
   greetings = 'A big hello from Mr. Bean'

   print *, 'Here is ', name
   print *, greetings

end program hello

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

Here is Mr.Rowan Atkinson
A big hello from Mr.Bean

いくつかのキャラクター関数

次の表は、説明とともにいくつかの一般的に使用される文字関数を示しています-

Sr.No Function & Description
1

len(string)

文字列の長さを返します

2

index(string,sustring)

別の文字列内の部分文字列の位置を見つけ、見つからない場合は0を返します。

3

achar(int)

整数を文字に変換します

4

iachar(c)

文字を整数に変換します

5

trim(string)

末尾の空白を削除した文字列を返します。

6

scan(string, chars)

「chars」に含まれる文字の最初の出現を「文字列」で左から右に(back = .trueでない限り)検索します。 その文字の位置を示す整数を返します。「chars」の文字が見つからない場合はゼロを返します。

7

verify(string, chars)

「chars」に含まれていない文字が最初に出現する場合、「string」を左から右に(back = .trueでない限り)スキャンします。 その文字の位置を示す整数を返します。「chars」の文字のみが見つかった場合はゼロを返します

8

adjustl(string)

「文字列」に含まれる文字を左揃えにします

9

adjustr(string)

「文字列」に含まれる文字を右揃えします

10

len_trim(string)

「string」の長さ(len(string))から末尾ブランクの数を引いた値に等しい整数を返します

11

repeat(string,ncopy)

これは、「ncopy」に「string」の長さを掛けた長さのストリングを返し、「string」の「ncopy」連結コピーを含みます

例1

この例は、*インデックス*関数の使用を示しています-

program testingChars
implicit none

   character (80) :: text
   integer :: i

   text = 'The intrinsic data type character stores characters and   strings.'
   i=index(text,'character')

   if (i/= 0) then
      print *, ' The word character found at position ',i
      print *, ' in text: ', text
   end if

end program testingChars

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

The word character found at position 25
in text : The intrinsic data type character stores characters and strings.

例2

この例は、 trim 関数の使用方法を示しています-

program hello
implicit none

   character(len = 15) :: surname, firstname
   character(len = 6) :: title
   character(len = 25)::greetings

   title = 'Mr.'
   firstname = 'Rowan'
   surname = 'Atkinson'

   print *, 'Here is', title, firstname, surname
   print *, 'Here is', trim(title),' ',trim(firstname),' ', trim(surname)

end program hello

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

 Here isMr.   Rowan          Atkinson
 Here isMr. Rowan Atkinson

実施例3

この例は、 achar 関数の使用を示しています-

program testingChars
implicit none

   character:: ch
   integer:: i

   do i = 65, 90
      ch = achar(i)
      print*, i, ' ', ch
   end do

end program testingChars

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

65  A
66  B
67  C
68  D
69  E
70  F
71  G
72  H
73  I
74  J
75  K
76  L
77  M
78  N
79  O
80  P
81  Q
82  R
83  S
84  T
85  U
86  V
87  W
88  X
89  Y
90  Z

文字の字句順を確認する

次の関数は、文字の字句シーケンスを決定します-

Sr.No Function & Description
1

lle(char, char)

最初の文字が字句的に2番目の文字以下かどうかを比較します

2

lge(char, char)

最初の文字が字句的に2番目の文字以上かどうかを比較します

3

lgt(char, char)

最初の文字が2番目の文字より字句的に大きいかどうかを比較します

4

llt(char, char)

最初の文字が2番目の文字より字句的に小さいかどうかを比較します

例4

次の機能は、使用を示しています-

program testingChars
implicit none

   character:: a, b, c
   a = 'A'
   b = 'a'
   c = 'B'

   if(lgt(a,b)) then
      print *, 'A is lexically greater than a'
   else
      print *, 'a is lexically greater than A'
   end if

   if(lgt(a,c)) then
      print *, 'A is lexically greater than B'
   else
      print *, 'B is lexically greater than A'
   end if

   if(llt(a,b)) then
      print *, 'A is lexically less than a'
   end if

   if(llt(a,c)) then
      print *, 'A is lexically less than B'
   end if

end program testingChars

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

a is lexically greater than A
B is lexically greater than A
A is lexically less than a
A is lexically less than B