Chương trình xoá khoảng cách thừa trong một chuỗi bị sai

Dưới đây là một chương trình xoá khoảng cách thừa khi nhập một chuỗi. Nhưng bài e làm nó chỉ đúng khi nhập thừa 1 dấu cách còn nhập nhiều hơn nó chỉ giảm đi 1 dấu thôi. E đang bí, ac nào có hướng giải quyết xin chỉ dẫn. Em cảm ơn ạ

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
 
char* lTrim (char s[])
{
    int i=0;
    while (s[i]==' ')i++;
    if (i>0) strcpy(&s[0], &s[i]);
    return s;

}
char* rTrim (char s[])
{
    int i=strlen(s)-1;
    while (s[i]==' ') i--;
    s[i+1]='\0';  
    return s;
}
char* trim (char s[])
{   rTrim(lTrim(s));
char *ptr = strstr(s, " ");
while (ptr!=NULL)
{
    strcpy (ptr,ptr+1);
    ptr=strstr(s," ");
}
return s;
                  }
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:\n");
	for(i=0;i<(n-dem);i++)
	{
		printf("%c",s[i]);
	}
	return 0;
}
  • Replace nhiều space -> 1 space (nếu nhiều space ở cạnh nhau) -> xoá space
  • Tìm vị trí các space, replace các vị trí đó thành chuỗi rỗng ‘’
1 Like

là sao ạ e chưa rõi lắm ạ nói cụ thể đc ko ạ

Bạn xây dựng thuật toán xong rồi mới code thì sẽ dễ hơn chút nha. Mình sửa phần trong hàm main nhé.

int i = 0;

while (i <= strlen(s))
{
   if (s[i] = ' ') 
     { kiểm tra xem có mấy dấu cách sau s[i], ví dụ được 3 dấu cách sau s[i] thì gọi hàm xóa 3 dấu cách từ vị trí i.
     }
  else
    {dấu cách tại vị trí i đủ điều kiện là đứng 1 mình nên ko cần làm gì cả}
    
  i++;
}

Hết vòng lặp ở trên thì sẽ đảm bảo là không có 2 dấu cách cạnh nhau, tiếp theo còn kiếm tra dấu cách ở đầu và cuối xâu nữa thôi, nếu còn thì xóa nốt.
=> xong

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?