文字列操作関数
文字列の宣言
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)
上位→ ↓下位 |
0 | 1 |
2 | 3 |
4 | 5 |
6 | 7 |
0 | NUL | DLE |
SP | 0 | @ | P | ` | p |
1 | SOH | DC1 |
! | 1 | A | Q | a | q |
2 | STX | DC2 |
" | 2 | B | R | b | r |
3 | ETX | DC3 |
# | 3 | C | S | c | s |
4 | EOT | DC4 |
$ | 4 | D | T | d | t |
5 | ENQ | NAC |
% | 5 | E | U | e | u |
6 | ACK | SYN |
& | 6 | F | V | f | v |
7 | BEL | ETB |
' | 7 | G | W | g | w |
8 | BS | CAN |
( | 8 | H | X | h | x |
9 | HT | EM | ) |
9 | I | Y | i | y |
A | LF/NL | SUB |
* | : | J | Z | j |
z |
B | VT | ESC |
+ | ; | K | [ | k | { |
C | FF | FS | , |
< | L | \ | l | | |
D | CR | GS |
- | = | M | ] | m | } |
E | SO | RS |
. | > | N | ^ | n | ~ |
F | SI | US |
/ | ? | O | _ | o | DEL |
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