Xóa tất cả các khoảng trắng thừa của xâu ký tự s

6
53220

Bài toán: Xóa tất cả các khoảng trắng thừa của xâu ký tự s

Input: chuỗi s

Xử lý: trước tiên cần viết hàm xóa

void xoa(char s[90],int vitrixoa)
{
	int n=strlen(s);//gán n= độ dài của chuỗi
    for(int i=vitrixoa;i<n;i++)//duyệt chuỗi từ vị trí cần xóa
     s[i]=s[i+1];
	s[n-1]='\0'; //kết thúc
}

Tiếp đến là viết hàm xóa khoản trắng

Duyệt chuỗi, nếu s[i] là khoản trắng và s[i+1] cũng là khoản trắng thì xóa 1 khoản trắng đi, xóa xong cần giảm i xuống đê quay lại vị trí khoản trắng để kiểm tra và tiếp tục xóa.

Ví dụ: nếu không giảm i xuống thì chuỗi: Le   Cong   Danh (ở đây có 3 khoản trắng)

Sẽ trở thành chuỗi: Le  Cong  Danh (ở đây có 2 khoản trắng)

Đúng ra là chuỗi nó phải ra: Le Cong Danh

Rồi nếu ở trước chữ Le nó có 1 khoản trắng thì nó không xóa, còn nhiều khoản trắng thì nó xóa để lại 1 khoản trắng. Vậy thì làm sao đê xóa khoản trắn đó.

Mình sẽ kiểm tra nếu s[0] là khoản trắng thì dùng hàm xóa đã viết ở trên xóa nó đi

Như vậy thì ở cuối Danh chữ cũng vậy, như xóa khoản trắng trước chữ Le thôi

Hàm xóa khoản trắng

void xoakt(char*s)
{
    for(int i=0;i<strlen(s);i++)
		if(s[i]==' '&& s[i+1]==' ')
		{
			xoa(s,i);
			i--;
		}
    if(s[0]==' ')
		xoa(s,0);
    if(s[strlen(s)-1]==' ')
		xoa(s,strlen(s)-1);
}

Chương trình

#include<stdio.h>
#include<conio.h>
#include<string.h>
void xoa(char s[90],int vitrixoa);
void xoakt(char*s);
void main()
{
    char s[90];
    printf("nhap chuoi ");
    gets(s);
	xoakt(s);
    puts(s);
    getch();
}
void xoa(char s[90],int vitrixoa)
{
	int n=strlen(s);//gán n= độ dài của chuỗi
    for(int i=vitrixoa;i<n;i++)//duyệt chuỗi từ vị trí cần xóa
     s[i]=s[i+1];
	s[n-1]='\0'; //kết thúc
}
void xoakt(char*s)
{
    for(int i=0;i<strlen(s);i++)
		if(s[i]==' '&& s[i+1]==' ')
		{
			xoa(s,i);
			i--;
		}
    if(s[0]==' ')
		xoa(s,0);
    if(s[strlen(s)-1]==' ')
		xoa(s,strlen(s)-1);
}

Mình chia sẽ code này đê các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.

Chúc các bạn thành công!

6 COMMENTS

This site uses Akismet to reduce spam. Learn how your comment data is processed.