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á

Câu hỏi trong lớp Xem thêm