01/10/2018, 16:58
Xin nhận xét cách xóa khoảng trắng trong chuỗi
#include <stdio.h>
#include<string.h>
int main ()
{
char s[50];
gets(s);
int n =strlen(s);
for (int i =0;i<n;i++)
if(s[i]=' ')
{
for (int j=i;j<n;j++)
s[j]=s[j++];
n--;
}
printf("%s",s);
return 0;
}
Bài liên quan
Nếu 2 dấu space ở cạnh nhau, nó sẽ bỏ qua dấu đằng sau.
Bạn dùng while thay cho if là được.
Như vậy chưa hay cứ ghi đè (bỏ qua khoảng trắng) lên chính nó.
Mình có cách này:
#Quy ước:
s
là chuỗi ta đang xử lílen
là độ số kí tự có trong chuỗi (không tính kí tự\0
)i, j
Chúng ta kiểm tra lần lượt các kí tự của chuỗi bằng biến chạy
i
cụ thểs[i]
. Nếu kí tự trong chuỗi hiện tại làs[i]
là một kí tự khoảng trắng' '
. Thì chúng ta gán lại các kí tự từi
->len - 1
bằng các kí tự từi + 1
->len
(sử dụng biến chạy j). Sau khi xong bước này ta tiếp tục kiểm tra lại kí tựs[i]
vì kí tự này sau khi ghi kí tự mới có thể vẫn là một kí tự khoảng trắng (trường hợp 2 khoảng trắng sát nhau). Còn nếu không bạn cho biến chạy tăng lên 1 đơn vị.==
chứ @_@dòng này là undefined behavior…
mỗi lần xóa khoảng trắng ko cần phải dồn toàn bộ chuỗi phía sau lên đâu, ghi đè luôn:
còn nếu chỉ xóa khoảng trắng thừa thì có thể xài 1 biến
acceptWhitespace
rồi đọc lần lượt từng ký tự, nếu là khoảng trắng vàacceptWhitespace == true
, hoặc khác khoảng trắng thì ghi vào, ko thì bỏ qua, nếu gặp khoảng trắng thì set biến này thành false, gặp ký tự khác khoảng trắng thì set nó thành true.Mình khắc phục r cảm ơn bạn
Thật ra bạn dùng 1 vòng lặp thôi r dùng 1 biến boolean để tracking ký tự trước là đc đấy.
Đầu tiên cho
isSpace = false
sau đó gặp cứ check nếu gặp khoảng trắng mà boolean true thì continue nếu là chữ khác mà boolean đang true thì set về false lại ^^