[HỎI] DevC-Xóa khoảng trắng trong chuỗi
-
(*)Viết chương trình nhập vào 1 chuỗi, cắt ký tự khoảng trắng trong chuỗi sao cho các từ cách nhau bằng 01 khoảng trắng.
day la code cua mình:#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char s[100];
int i,n,j,dem,lap=0;
gets(s);
dem=0;
n=strlen(s);
do
{
for(i=0;i<n;i++)
{
if((s[i]==’ ‘)&&(s[i+1]==’ '))
{
dem++;
for(j=i;j<n;j++)
{
s[j]=s[j+1];
}
}
}
}
while(dem==0);
printf(“Chuoi sau khi cat: ”);
for(i=0;i<(n-dem);i++)
{
printf("%c",s[i]);
}
return 0;
}
nhưng sao nó chỉ xóa được 2 khoảng trắng liên tiếp thôi, nhiều hơn 2 khoảng trắng liên tiếp thì nó chỉ xóa được 1 khoảng trắng,mọi người giúp với xem code mình sai chỗ nào
do vào vòng for thì i sẽ tăng lên nên i sẽ bị dâng lên, nên mình sẽ i-- nó trước khi vào vòng for
mình cũng sửa chỗ n–, vì n là độ dài của chuỗi nên làm thế cho logic có ảnh hưởng nha
mình thấy vòng while cũng không ổn, nếu như chuỗi không có kí tự space dư thừa thì sẽ bị loop mât… có thể bỏ vòng while đi
uh để mình thử lại xem
lúc đầu em cũng dùng vòng for nhưng kết quả vẫn zay nên thử vòng do while thấy cũng chả khác gì :3 hihi
sao nó chạy vẫn không đúng nhỉ
đúng mà nhỉ “MOT HAI BA NAM” đâu có thiếu nhịp nào đâu
xem dùm em sai chỗ nào
ra đều tăm tắp mà nhỉ? cho xem kết quả đi bạn
i-- không phải i++
úi giời hèn gì nãy giờ không thấy,thank bác nhiệt tình
Code này hình như không xoá được khoảng trắng đầu và cuối Đề yêu cầu là 2 từ cách nhau mới có khoảng trắng thôi
uh thì chỉ cần 2 từ cách nhau bằng 1 khoảng trắng là ok roi
còn cắt đầu và cuối chuỗi thì mình làm được
mình fix code của bạn kia thui
cơ mà thêm trường hợp riêng là được mà nhỉ
s[i+1]='\0'
cái này để xóa đuôis[0]=' '
cái này để xóa đầuCó hàm nào để cắt chuỗi không nhỉ
Bạn xem hàm memmove nhé, viết khéo léo sẽ thành hàm xóa kí tự
xem hàm strtok, thường dùng để cắt chuỗi khi gặp kí tự ngắt
Giải thích em về hàm strtok dc không anh
http://www.cplusplus.com/reference/cstring/strtok/?kw=strtok
ví dụ có một câu
"mot hai ba nam"
thì lần đầu tiên truyền chuỗi này vào hàm (kí tự delimiter là space' '
) thì chuỗi còn"mot"
tuy nhiên các dữ liệu ở phía sau vẫn còn. Lý do là hàm strtok sẽ làm cho các kí tự space tìm được trở thành'\0'
. Lần gọi sau thì nó sẽ nhảy tới vị trí kế tiếp, con trỏ sẽ giữ địa chỉ của chuỗi “hai” (tất nhiên là dữ liệu của chuỗi vẫn còn). Đọc example trong link cho dễ hiểu.Hàm này biến đổi chuỗi nên là chép chuỗi qua chuỗi khác rồi hẵng làm strtok
ồ, mở mang duoc kiến thức thank bác lần nữa
Bài này 1 vòng while là ra, sao lại phức tạp thế
quan trõng nghĩ ko ra vòng while :))
cái hàm strtok chạy ngược từ cuối chuỗi lên đầu chuỗi được không Rock_Hoang