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ế

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)

0 bình luận về “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ế”

  1. 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á

    Bình luận
  2. 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.

    Bình luận

Viết một bình luận