文字列操作関数

文字列の宣言 a:String; a:ShortString; // 255文字まで a:Ansistring; b:Widestring; //2byteコード 文字列の代入 a:='ABCDE'; 文字列をリセットする a:=''; ASCIIキャラクタコードから文字列にする #0 // Null #13 // CRコード #10 // LF改行コード #20 // 半角スペース Char(13) 1byte文字をASCIIキャラクタコードにする Ord('A') // AのASCIIコードの10進数である65を出力   関連 Ord(#65) // 65を出力 Chr(Ord('A')) // Aを出力 r:Char; // rをChar宣言する r:=Char('A'); // Aをキャラクタrにし、 write(Ord(r));  // Ordで65と表示する 文字列の加算 a:=b+'ABCDE'; 数値を文字列に変換する IntToStr(a) //整数を文字列に変換 FloatToStr(a) //実数を文字列に変換 文字列の長さを求める Length(a) //byte数 Length(WideString(a)) //文字数 文字列の一部を取り出す a[6] //文字列aの6文字目を取り出す 文字列の左端から指定した長さの文字列を取り出す Copy(a,1,2); //左端の1byte目から2byte Copy(WideString(a),1,2); //左端の1文字目から2文字 文字列の途中から指定した長さの文字列を取り出す Copy(a,3,2); //左端から3byte目から2byte Copy(WideString(a),3,2); //左端から3文字目から2文字 文字列の右端から指定した長さの文字列を取り出す Copy(a,(Length(a)-1),2); //右端の2byte Copy(a,(Length(a)-2),3); //右端の3byte Copy(WideString(a),(Length(WideString(a))-1),2); Copy(WideString(a),(Length(WideString(a))-2),3); 小文字に変換する LowerCase(a) 大文字に変換する UpperCase(a) 文字列の一部を削除する Delete(a,1,2) 1byte文字を2byte文字に変換する ASCIIコード表 文字Aは16進数で41、10進数で65である。(4x16+1=65)
上位→
↓下位
01 23 45 67
0NULDLE SP0@P`p
1SOHDC1 !1AQaq
2STXDC2 "2BRbr
3ETXDC3 #3CScs
4EOTDC4 $4DTdt
5ENQNAC %5EUeu
6ACKSYN &6FVfv
7BELETB '7GWgw
8BSCAN (8HXhx
9HTEM) 9IYiy
ALF/NLSUB *:JZj z
BVTESC +;K[k{
CFFFS, <L\l|
DCRGS -=M]m}
ESORS .>N^n~
FSIUS /?O_oDEL

1、文字列を入力し、その文字列中のそれぞれの文字を以下のように変換する A→@ B→A ・・・ Y→X Z→Y a→’  b→a ・・・ y→x z→y 0→/ 1→0 ・・・ 8→7 9→8  文字のASCIIコードを求め、その数から1を引き、再び文字に戻せばよい。  この操作を文字列の長さ分だけ繰り返す。 program string4; {$AppType Console} uses SysUtils; var s: string[30]; len,i: integer; begin write('文字列を入力してください:'); readln(s); len := Length(s); for i:=1 to len do write(Chr(Ord(s[i])-1)); // ASCIIコードで1つ手前になるから、1を引く writeln; readln; end. 2、文字列を入力し、その文字列中の偶数番目の文字を以下のように変換する A→B  B→C  ・・・ Y→Z Z→[ a→b   b→c  ・・・  y→z  z→{ 0→1  1→2  ・・・  8→9  9→:  文字のASCIIコードを求め、その数に1を足し、再び文字に戻せばよい。  この操作を文字列の長さ分だけ繰り返す。 program string4; {$AppType Console} uses SysUtils; var s: string[30]; len,i: integer; begin write('文字列を入力してください:'); readln(s); len := Length(s); for i:=1 to len do if int(i/2)*2=i then // if int(i/2)=i/2 then でも良い。int(i/2)はi/2の整数部を返します。 write(Chr(Ord(s[i])+1)) // 偶数番目は1つ後ろへずらし else write(Chr(Ord(s[i]))); // 奇数番目はそのまま writeln; readln; end. 3、文字列を入力し、その文字列中の奇数番目の文字を以下のように変換する A→@ B→A ・・・ Y→X Z→Y a→’  b→a ・・・ y→x z→y 0→/ 1→0 ・・・ 8→7 9→8  奇数番目の文字を取り出し、その文字の文字のASCIIコードを求め、その数から1を引き、再び文字に戻せばよい。  この操作を文字列の長さ分だけ繰り返す。 program string4; {$AppType Console} uses SysUtils; var s: string[30]; len,i: integer; begin write('文字列を入力してください:'); readln(s); len := Length(s); for i:=1 to len do if int((i+1)/2)=(i+1)/2 then // 奇数番目の判定は、1を足して偶数にして行えばよい write(Chr(Ord(s[i])-1)) else write(Chr(Ord(s[i]))); writeln; readln; end. 4、文字列を入力し、回文かどうかを判定する  文字列の左端と右端からそれぞれ1文字ずつ取り出し、一致するかどうか  を中央まで繰り返せばよい。 program string4; {$AppType Console} uses SysUtils; var s: string[30]; len,i,j,flag: integer; r:real; begin write('文字列を入力してください:'); readln(s); len := Length(s); flag:=0; for i:=1 to len do // 本当はここの len を、int(len/2)にしたいですけどエラーが出るのでこうしましたが if Copy(s,i,1)=Copy(s,len-i+1,1) then flag:=flag+0 else flag:=flag+1; if flag=0 then writeln('回文です') else writeln('回文ではありません'); readln; end. 5、入力した文字列をすべて小文字に変換して出力する  文字列からCopy関数で1文字ずつ取り出し、LowerCase関数で小文字に変換し、  これを文字列の長さ分だけ繰り返せばよい program Project3; {$APPTYPE CONSOLE} uses SysUtils; var i,l:Integer; a,r:String; begin write('文字列入力='); readln(a); //文字列の読み込み l:=Length(a); //文字列の長さを得る for i:=1 to l do //長さ分だけ繰り返す r:=r+LowerCase(Copy(a,i,1)); //1文字ずつ小文字に変換 writeln('変換結果=',r); //結果を表示する readln; end. 6、入力した文字列をすべて大文字に変換して出力する  5の逆ですから、UpperCaseにすれば良い program Project3; {$APPTYPE CONSOLE} uses SysUtils; var i,len:Integer; a,r:String; begin write('文字列入力='); readln(a); len:=Length(a); for i:=1 to len do r:=r+UpperCase(Copy(a,i,1)); writeln(r); readln; end. 7、入力した文字列に対して、大文字は小文字に、小文字は大文字に変換して出力する  文字列の左端から順に1文字ずつ取り出し、その文字のASCIIコードを調べ、そのASCIIコードが     16進数で41(65)以上5A(90)以下であれば、16進数の20(32)を足して小文字にし     16進数で61(97)以上7A(122)以下であれば、16進数の20(32)を引いて大文字にする。         上記の( )内は10進数表記 8、2つの文字列 text1 text2を入力しtext1が text2に含まれるかどうかを判定する  text1とtext2の文字列の長さを求め、text2の長さがtext1の長さより大きい場合は  text2の左端からtext1の長さ分の文字列を取り出し、text1と一致するかどうかを調べる。  この操作をtext2の右端からtext1の長さ分のところまで1文字ずつずらしながら繰り返せばよい。  一致した場合は「含まれる」と表示し、一致しない場合は「含まれない」と表示する。  また、text2の長さがtext1より短い場合は、「含まれない」と表示する。 program Project4; {$APPTYPE CONSOLE} uses SysUtils; var s,ss:string[30]; n:string[30]; long,len,i,j,flag:integer; begin write('文字列を入力してください'); readln(s); write('2つ目の文字列を入力してください'); readln(n); len:=Length(s); long:=Length(n); flag:=0; if len>=long then begin for i:=1 to len-long+1 do begin ss:=''; for j:=i to i+long-1 do ss:=ss+s[j]; if ss=n then flag:=flag+1; end; end; if flag=1 then writeln('含まれる') else writeln('含まれない'); readln; en