For i:=1 to length do If s[i]:=' ' then delete(s,i,1) Khi cho kết quả thứ nhất S:= truong trung hoc pho thong (thì kết quả sẽ xóa hết kí tự trống) Còn cho kết quả thứ hai S:= truong trung hoc pho thong (thi kết quả sẽ không xóa hết kí tự trống) Mn giải thích giúp em vì sao nó như vậy ạ

2 câu trả lời

*Test 1: 

S:= truong trung hoc pho thong thì khi thực hiện chạy từ đầu đến cuối đã biến đổi:

*Lần 1: gặp khoảng trống ở vị trí số 7 thì nó xóa đi. S:= truongtrung hoc pho thong.

*Lần 2: gặp khoảng trống ở vị trí số 12 thì nó xóa đi. S:= truongtrunghoc pho thong.

... 4 lần còn lại S:= truongtrunghocphothong

*Test 2:

S:= truong   trung hoc pho thong. Tương tự như test 1:

*Lần 1: gặp khoảng trống ở vị trí số 7 thì nó xóa đi. S:= truong  trung hoc pho thong.

*Lần 2: gặp khoảng trống ở vị trí số 8 thì nó xóa đi. S:= truong trunghoc pho thong. Từ đó chương trình đã bỏ quả  khoảng trống ở vị trí số 7 nên kết quả sẽ không xóa hết kí tự trống.

... 5 lần còn lại S:= truong trunghocphothong

Ở 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