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

toi1em

Member
Feb 20, 2012
949
0
16
40
320x50.jpg


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=s[i+1]; s[n-1]='\0'; //kết thúc }



1

2

3

4

5

6

7


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=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 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==' '&& s[i+1]==' ') { xoa(s,i); i--; } if(s[0]==' ') xoa(s,0); if(s[strlen(s)-1]==' ') xoa(s,strlen(s)-1); }



1

2

3

4

5

6

7

8

9

10

11

12

13


void xoakt(char*s)

{

for(int i=0;i<strlen(s);i++)

if(s==' '&& 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=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==' '&& s[i+1]==' ') { xoa(s,i); i--; } if(s[0]==' ') xoa(s,0); if(s[strlen(s)-1]==' ') xoa(s,strlen(s)-1); }



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34


#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=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==' '&& 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!

Sưu tầm & Tổng hợp
w: www.hanoiyeu.com
e: [email protected]