さまざまな文字列操作

明解C言語 入門編 > 11. 文字列とポインタ >

さまざまな文字列操作

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, StrUtils;

procedure main();
const
st1: String = '1234567890';
st2: String = 'ABCDE';

pt1: array[0..255] of Char = '1234567890';
pt2: array[0..255] of Char = 'ABCDE';
var
st3: String;
pt3: array[0..255] of Char;
ptr: PChar;
c : Char;
i, j: Integer;
begin
(* Concat *)
st3 := st1 + st2;
Writeln(Format('%s + %s = %s', [st1, st2, st3]));

st3 := Concat(st1, st2);
Writeln(Format('%s + %s = %s', [st1, st2, st3]));

Writeln('');

(* Pos *)
st3 := '45';
i := Pos(st3, st1);
Writeln(Format('Pos(%s, %s) = %d', [st3, st1, i]));

st3 := '12';
i := Pos(st3, st1);
Writeln(Format('Pos(%s, %s) = %d', [st3, st1, i]));

st3 := '123456780';
i := Pos(st3, st1);
Writeln(Format('Pos(%s, %s) = %d', [st3, st1, i]));

Writeln('');

(* LeftStr *)
i := 5;
st3 := LeftStr(st1, i);
Writeln(Format('LeftStr(%s, %d) = %s', [st1, i, st3]));

(* MidStr *)
i := 5;
j := 3;
st3 := MidStr(st1, i, j);
Writeln(Format('MidStr(%s, %d, %d) = %s', [st1, i, j, st3]));

(* RightStr *)
i := 5;
st3 := RightStr(st1, i);
Writeln(Format('RightStr(%s, %d) = %s', [st1, i, st3]));

Writeln('');

(* ReverseString *)
st3 := ReverseString(st1);
Writeln(Format('ReverseString(%s) = %s', [st1, st3]));

Writeln('');

(* StuffString *)
i := 5;
j := 3;
st3 := StuffString(st1, i, j, st2);
Writeln(Format('StuffString(%s, %d, %d, %s) = %s', [st1, i, j, st2, st3]));

Writeln('');

(* StringReplace *)
st3 := StringReplace('AbcAbcAbc', 'ABC', '123', [rfIgnoreCase]);
Writeln(Format('StringReplace(''AbcAbcAbc'', ''ABC'', ''123'', [rfIgnoreCase]) = %s', [st3]));

st3 := StringReplace('AbcAbcAbc', 'ABC', '123', [rfIgnoreCase, rfReplaceAll]);
Writeln(Format('StringReplace(''AbcAbcAbc'', ''ABC'', ''123'', [rfIgnoreCase, rfReplaceAll]) = %s', [st3]));

st3 := StringReplace('AbcABCABC', 'ABC', '123', []);
Writeln(Format('StringReplace(''AbcABCABC'', ''ABC'', ''123'', []) = %s', [st3]));

Writeln('');

(* Insert *)
i := 5;
st3 := '1234567890';
st2 := 'ABC';
write(Format('Insert(%s, %s, %d) = ', [st2, st3, i]));
Insert(st2, st3, i);
Writeln(Format('%s', [st3]));

(* Delete *)
i := 5;
j := 3;
st3 := '1234567890';
write(Format('Delete(%s, %d, %d) = ', [st3, i, j]));
Delete(st3, i, j);
Writeln(Format('%s', [st3]));

Writeln('');

(* StrCat *)
pt3 := '1234567890';
write(Format('%s + %s = ', [pt3, pt2]));
StrCat(pt3, pt2);
Writeln(Format('%s', [pt3]));

Writeln('');

(* StrComp *)
pt1 := '123';
pt2 := '123';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

pt2 := '122';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

pt2 := '124';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

pt2 := '999';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

pt2 := '12';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

pt2 := '1234';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

Writeln('');

(* StrIComp *)
pt1 := 'ABCD';
pt2 := 'abcd';
i := StrComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

i := StrIComp(pt1, pt2);
if (i = 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else if (i > 0) then
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]))
else
Writeln(Format('%s = %s (%d)', [pt1, pt2, i]));

Writeln('');

(* StrPos *)
pt1 := '1234567890';
pt2 := '45';
ptr := StrPos(pt1, pt2);
Writeln(Format('StrPos(%s, %s) = %d', [pt1, pt2, ptr - pt1]));

pt2 := '12';
ptr := StrPos(pt1, pt2);
Writeln(Format('StrPos(%s, %s) = %d', [pt1, pt2, ptr - pt1]));

pt2 := '123456780';
ptr := StrPos(pt1, pt2);
if (ptr = nil) then
Writeln(Format('StrPos(%s, %s) = nil', [pt1, pt2]))
else
Writeln(Format('StrPos(%s, %s) = %d', [pt1, pt2, ptr - pt1]));

Writeln('');

(* StrScan *)
pt1 := '1294567890';
c := '9';
ptr := StrScan(pt1, c);
Writeln(Format('StrScan(%s, %s) = %d', [pt1, c, ptr - pt1]));

c := 'A';
ptr := StrScan(pt1, c);
if (ptr = nil) then
Writeln(Format('StrScan(%s, %s) = nil', [pt1, c]))
else
Writeln(Format('StrScan(%s, %s) = %d', [pt1, c, ptr - pt1]));

Writeln('');

(* StrRScan *)
c := '9';
ptr := StrRScan(pt1, c);
Writeln(Format('StrRScan(%s, %s) = %d', [pt1, c, ptr - pt1]));

c := 'A';
ptr := StrRScan(pt1, c);
if (ptr = nil) then
Writeln(Format('StrRScan(%s, %s) = nil', [pt1, c]))
else
Writeln(Format('StrRScan(%s, %s) = %d', [pt1, c, ptr - pt1]));
end;

begin
main;
end.

実行結果

S:\>lesson087\project1.exe
1234567890 + ABCDE = 1234567890ABCDE
1234567890 + ABCDE = 1234567890ABCDE

Pos(45, 1234567890) = 4
Pos(12, 1234567890) = 1
Pos(123456780, 1234567890) = 0

LeftStr(1234567890, 5) = 12345
MidStr(1234567890, 5, 3) = 567
RightStr(1234567890, 5) = 67890

ReverseString(1234567890) = 0987654321

StuffString(1234567890, 5, 3, ABCDE) = 1234ABCDE890

StringReplace('AbcAbcAbc', 'ABC', '123', [rfIgnoreCase]) = 123AbcAbc
StringReplace('AbcAbcAbc', 'ABC', '123', [rfIgnoreCase, rfReplaceAll]) = 123123123
StringReplace('AbcABCABC', 'ABC', '123', []) = Abc123ABC

Insert(ABC, 1234567890, 5) = 1234ABC567890
Delete(1234567890, 5, 3) = 1234890

1234567890 + ABCDE = 1234567890ABCDE

123 = 123 (0)
123 = 122 (1)
123 = 124 (-1)
123 = 999 (-8)
123 = 12 (51)
123 = 1234 (-52)

ABCD = abcd (-32)
ABCD = abcd (0)

StrPos(1234567890, 45) = 3
StrPos(1234567890, 12) = 0
StrPos(1234567890, 123456780) = nil

StrScan(1294567890, 9) = 2
StrScan(1294567890, A) = nil

StrRScan(1294567890, 9) = 8
StrRScan(1294567890, A) = nil