Được gửi bởi
Alexman113
Viết chương trình nhập vào một chuỗi kí tự.
1. a) Cho biết độ dài của chuỗi.
b) Cho biết trong chuỗi có nhiêu khoảng trắng, đếm số khoảng trắng của chuỗi, vị trí từng khoảng trắng.
2. a) Đổi toàn bộ chuỗi ra hoa.
b) Đổi toàn bộ chuỗi ra thường.
c) Đổi hoa ra thường và thường ra hoa.
3. Đổi những chữ đầu của từ ra hoa còn lại là thường. (Vd: Độc lập tự do hạnh phúc -->>> Độc Lập Tự Do Hạnh Phúc)
4. Đếm bao có bao nhiêu kí hiệu khác (trừ chữ thường, chữ hoa và số).
5. Xuất ra tổng mã ASCII của tất cả các kí tự của chuỗi.
6. Bỏ các khoảng trắng thừa (chuỗi chuẩn).
7. Cho biết chuỗi có bao nhiêu từ.
8. Nhập vào một kí tự bất kì
a) Đếm số lần xuất hiện của kí tự đó trong chuỗi(không phân biệt chữ thường và hoa).
b) Thay thế một kí tự nào đó bằng kí tự vừa nhập vào.
Giúp em với ạ, em xin cảm ơn ạ.
--
{Date: 2014/12/03/00h09m}
{Sử dụng các hàm trong TP7:
Declaration
function Copy(S: String; Index: Integer; Count: Integer): String;
function Delete(S: String; Index: Integer; Count: Integer): String;
function Pos(Substr: String; S: String): Byte;
procedure Insert(Source: String; var S: String; Index: Integer);
}
1. a) Cho biết độ dài của chuỗi.
Code:
function Len (Text :String) :Byte;
{2014/12}
begin
Len := Ord (Text [0]);
end;
[code]
6. Bỏ các khoảng trắng thừa (chuỗi chuẩn).
{Các khoảng trắng bên trái}
Code:
function TrimLeft (Text :String) :String; {Loại bỏ các khoảng trắng ở đầu chuỗi}
{2014/12}
var
i :Byte;
J :Byte;
begin
if Length (Text) <= 1 then
TrimLeft := Text
else
begin
j := 0;
for i:=1 to Length (Text) do
if Text [i] = ' ' then
begin
Inc (j); {Đếm số khoảng trắng}
continue;
end
else
break; {Không còn khoảng trắng ở đầu nữa}
TrimLeft := Copy (Text, j + 1, Length (Text) - j);
end; {else}
end; {TrimLeft}
{Các khoảng trắng bên phải}
Code:
function TrimRight (Text :String) :String; {Loại bỏ các khoảng trắng ở cuối chuỗi}
{2014/12}
{ var
s :String; }
begin
if Length (Text) <= 1 then
TrimRight := Text
else
TrimRight := Reverse (TrimLeft (Reverse (Text)));
(*
s := Reverse (Text); {Đảo chuỗi, để cuối chuỗi thành đầu chuỗi}
s := TrimLeft (s); {và loại bỏ khoảng trắng}
s := Reverse (s); {Rồi đảo lại như cũ}
TrimRight := s;
*)
end; {TrimRight}
Code:
function Trim (Text :String) :String;
{Loại bỏ các khoảng trắng đầu/cuối chuỗi,
Phần còn lại trong chuỗi nếu có >=2 khoảng trắng liên tiếp nhau thì chỉ giữ lại 1 khoảng trắng}
var
s :String;
i :Byte;
enable :Boolean;
begin
if Length (Text) <= 1 then
Trim := Text
else
begin
{ s := Text; }
{ s := TrimLeft (s); } {Loại bỏ các khoảng trắng ở đầu chuỗi}
{ s := TrimRight (s); } {Loại bỏ các khoảng trắng ở cuối chuỗi}
Text := TrimRight (TrimLeft (Text));
{Không còn khoảng trắng ở đầu chuỗi và cuối chuỗi}
{Bây giờ xử lý phần giữa}
enable := true; {cho phép ghi khoảng trắng}
s :='';
for i:=1 to Length (Text) do
if Text [i] <> ' ' then {Nếu không phải khoảng trắng thì ghi bình thường}
begin
s := s + Text [i];
enable := true; {Và cho phép ghi khoảng trắng sau nó - nếu có}
continue;
end
else {Có khoảng trắng?}
if (enable = true) then {Nếu trước đó không có khoảng trắng, Được ghi ?}
begin
s := s + Text [i]; {Thì ghi lại}
enable := false; {Và đánh dấu là có khoảng trắng rồi, không cho phép ghi nữa}
continue;
end
else continue;
Trim := s;
end;
end; {Trim}
3. Đổi những chữ đầu của từ ra hoa còn lại là thường.
Code:
function TitleCase (Text :String) :String; {Đầu từ: chữ Hoa,khác: chữ thường}
var
flag:Boolean;
i :Byte;
begin
if Length (Text) <= 1 then
Trim := Upper (Text)
else
begin
flag := True;
for i := 1 to Length (Text) do
begin
if Text [i] = ' ' then {Là khoảng trắng?,=>ký tự tiếp theo (nếu có) là ký tự đứng đầu 1 từ}
begin
flag := True; {và cho phép ký tự đó là chữ Hoa}
continue;
end
else {Không phải khoảng trắng}
begin
if flag then {flag = True ?, => Chữ Hoa}
begin
Text [i] := UpCase (Text [i]);
flag := not (flag); {Đặt lại chữ thường}
end
else {flag = false, => Chữ thường}
begin
Text [i] := LowCase (Text [i]);
end;
end;
end;
TitleCase := Text;
end;
end;
2. a) Đổi toàn bộ chuỗi ra hoa.
Code:
function Upper (Text :String) :String;
{2014/12}
var
i :Integer;
begin
for i := 1 to Length (Text) do Text [i] := UpCase (Text [i]);
Upper := Text;
end; {Upper}
2. b) Đổi toàn bộ chuỗi ra thường.
Code:
function Lower (Text :String) :String;
{2014/12}
var
i :Integer;
begin
for i := 1 to Length (Text) do
if ((Ord (Text [i]) >= 65) and (Ord (Text [i]) <= 90)) then
Text [i] := Chr (Ord (Text [i]) + 32);
Lower := Text;
end; {Lower}
KHÁC:
Đầu câu viết Hoa:
Code:
function Proper (Text :String) :String;
{2014/12}
begin
Text := TrimLeft (Text);
Text := Lower (Text);
Text [1] := UpCase (Text [1]);
Proper := Text;
end;
{Giống hàm Exact trong Excel}
{So sánh chuỗi có giống nhau không}
Code:
function Exact (Text1, Text2 :String) :Boolean;
{2014/12}
begin
Exact:=( (Length (Text1) = Length (Text2)) and (Pos (Text1, Text2) <> 0) );
end;
KHÁC:
{Giống hàm Left trong Excel}
Code:
function Left (Text :String; Num_Chars :Byte) :String;
{2014/12}
begin
if Num_Chars >= Length (Text) then
Left := Text
else
Left := Copy (Text, 1, Num_Chars);
end;
KHÁC:
{Giống hàm Right trong Excel}
Code:
function Right (Text :String; Num_Chars :Byte) :String;
{2014/12}
begin
if Num_Chars >= Length (Text) then
Right := Text
else
Right := Copy (Text, (Length (Text) - Num_Chars + 1), Num_Chars);
end;
8. Tìm kiếm và thay thế:
Thay thế ký tự:
Code:
function Find_Char (Find_Text :String; Within_Char :Char; Start_Num :Byte) :Byte;
{2014/12}
var
Position :Byte;
begin
Position := Pos (Within_Char, Copy (Find_Text, Start_Num, Length (Find_Text)));
if (Position <> 0) then Position := (Position + Start_Num -1);
Find_Char := Position;
end; {function Find_Char}
Tìm và thay thế chuỗi:
{Giống hàm find trong Excel}
Code:
function Find (Find_Text, Within_Text :String; Start_Num :Byte) :Byte;
{2014/12}
var
Position :Byte;
begin
Position := Pos (Within_Text, Copy (Find_Text, Start_Num, Length (Find_Text)));
if (Position <> 0) then Position := (Position + Start_Num -1);
Find := Position;
end; {function Find}
Tìm và thay thế chuỗi:
{Giống hàm SubStitute trong Excel}
Code:
function SubStitute (Text, Old_Text, New_Text :String) :String;
{2014/12/}
var
Position :Byte;
begin
while Pos (Old_Text, Text) <> 0 do
begin
Position := Pos (Old_Text, Text);
Delete (Text, Position, Length (Old_Text));
Insert (New_Text, Text, Position);
end;
SubStitute := Text;
end; {SubStitute}
Tìm và thay thế chuỗi:
{Giống hàm Replace trong Excel}
Code:
function Replace (Old_Text :String; Start_Num, Num_Chars :Byte; New_Text :String) :String;
{2014/12}
begin
Delete (Old_Text, Start_Num, Num_Chars);
Insert (New_Text, Old_Text, Start_Num);
Replace := Old_Text;
end; {Replace}
{Giống hàm Mid trong Excel}
Code:
function Mid (Text :String; Start_Num, Num_Chars :Byte) :String;
begin
if Start_Num > Length (Text) then
Mid := ''
else
Mid := Copy (Text, Start_Num, Num_Chars);
end;
KHÁC:
{Đảo ngược chuỗi}
Code:
function Reverse (Text :String) :String; {Đảo ngược chuỗi}
{2014/12}
var
String1 :string [1];
L :Byte; {Length}
i :Byte; {Counter}
begin
L := Length (Text);
for i:=1 to (L div 2) do {Lấy 2 nửa chuỗi hoán đổi}
begin
String1 [1] := Text [i]; {x=b}
Text [i] := Text [L-i+1]; {b=a}
Text [L-i+1]:= String1 [1]; {a=x=b}
end;
Reverse := Text;
end;
--
-- Mặc dù từ 2012, nhưng có lẽ còn có ích với ai đó;
-- code trên còn dài, chưa hiệu phải hiệu quả, bạn nào sửa giúp.
--
Bookmarks