Mn giải thích giúp em cái này với ạ For i:=1 to length(s) do If s[i]:=' ' then delete(s,i,1); Khi ta nhập kết quả S:=trung trung hoc( thì nó sẽ xóa hết các kí tự trống) Còn ta nhập kết quả S:=trung trung học( thì nó không xóa hết kí tự trống)
2 câu trả lời
Code này của bạn sai nha. Khi mà nó xóa xong kí tự ' ' ở vị trí 6 vòng lặp sẽ chạy đến i = 7. Kí tự thứ 7(sau khi xóa kí tự thứ 6) thì nó lại là chữ 't' rồi. Nó hơi khó hiểu 1 tí, bạn có thể hỏi lại mình.
Code đúng:
program chuongtrinh;
uses crt;
var
s : string;
i : integer;
begin
clrscr;
readln(s);
i := 1;
while (i < length(s)) do
begin
if (s[i] = ' ') then
begin
delete(s, i, 1);
end
else
begin
i := i + 1;
end;
end;
write(s);
end.
Trong trường hợp đầu, xét đoạn "truong trung", khi xoá xong dấu cách thì thành " truongtrung", giá trị i tự động tăng lên 1 đơn vị, khi đó s[i] là kí tự r của "trung", cứ như vậy trong xâu sẽ không còn dấu cách nào
Còn ở trường hợp sau, xét đoạn "truong trung" (có 2 dấu cách liền), ta có s[7]=' ', và s[8]=' ', khi i=7 thì thoả mãn s[i]=' ', kí tự s[7] bị xoá -> độ dài xâu giảm 1 đơn vị, khi đó i đang mang giá trị 7 nhưng thật ra là 8, kết thúc vòng lặp i tăng lên thành 8, s[8]='t' (mới). Nói đơn giản là kí tự cách thứ 2 bị bỏ qua nên không bị xoá