C++ code – 98 lines – codepad

/* Bài 1. Cho 1 chuỗi bất kì. Viết chương trình chuẩn hóa chuỗi theo các yêu cầu sau:

+ Xóa hết các khoảng trắng thừa ở đầu và cuối chuỗi

+ Mỗi từ cách nhau 1 khoảng trắng <=> xóa khoảng trắng thừa ở giữa các từ

+ Viết hoa kí tự đầu của mỗi từ

VD:

"Nguyen Van Teo"

"nguyen van teo"

*/

#include<iostream>

using

namespace

std

;

#include<string>

// khai báo thư viện để dùng chuỗi string

#pragma warning(disable:4996)

// loại bỏ lỗi 4996

// hàm xóa các khoảng trắng thừa ở đầu và cuối chuỗi

void

Xoa_Khoang_Trang_Thua_Dau_Va_Cuoi

(

string

&

str

)

{

// Bước 1: Xóa hết tất cả các kí tự khoảng trắng thừa ở đầu chuỗi

// cho vòng lặp while lặp cho đến khi nào kiểm tra kí tự đầu tiên - vị trí 0 không phải là khoảng trắng thì dừng

while

(

str

[

0

]

==

' '

)

{

str

.

erase

(

str

.

begin

()

+

0

);

// xóa kí tự tại vị trí 0

}

// Bước 2: Xóa hết tất cả các kí tự khoảng trắng thừa ở cuối chuỗi

while

(

str

[

str

.

length

()

-

1

]

==

' '

)

{

str

.

erase

(

str

.

begin

()

+

str

.

length

()

-

1

);

// xóa kí tự tại vị trí cuối của chuỗi

}

}

// hàm xóa khoảng trắng thừa ở giữa các từ

void

Xoa_Khoang_Trang_Giua_Cac_Tu

(

string

&

str

)

{

for

(

int

i

=

0

;

i

<

str

.

length

();

i

++

)

{

// nếu 2 kí tự liên tiếp nhau mà là khoảng trắng ==> xóa đi 1 kí tự

if

(

str

[

i

]

==

' '

&&

str

[

i

+

1

]

==

' '

)

{

str

.

erase

(

str

.

begin

()

+

i

);

i

--

;

}

}

}

// hàm viết hoa kí tự đầu của mỗi từ

void

In_Hoa_Ki_Tu_Dau_Moi_Tu

(

string

&

str

)

{

// Bước 1: chuyển chuỗi str về chuỗi in thường

strlwr

((

char

*

)

str

.

c_str

());

// hàm chuyển chuỗi str về chuỗi in thường

// Bước 2: viết hoa kí tự đầu của mỗi từ

if

(

str

[

0

]

!=

' '

)

{

if

(

str

[

0

]

>=

97

&&

str

[

0

]

<=

122

)

{

str

[

0

]

-=

32

;

}

}

// kí tự tại vị trí i là khoảng trắng, i + i khác khoảng trắng thì kí tự tại vị trí i + 1 chính là kí tự đầu tiên của mỗi từ

for

(

int

i

=

0

;

i

<

str

.

length

()

-

1

;

i

++

)

{

if

(

str

[

i

]

==

' '

&&

str

[

i

+

1

]

!=

' '

)

{

// A: 65

// B: 66

// Z: 90

// a: 97

// b: 98

// c: 99

// z: 122

if

(

str

[

i

+

1

]

>=

97

&&

str

[

i

+

1

]

<=

122

)

{

// - 32 là chuyển kí tự in thường về in hoa

str

[

i

+

1

]

-=

32

;

// <=> str[i + 1] = str[i + 1] - 32;

}

}

}

}

int

main

()

{

string

str

;

cout

<<

"

\n

Nhap chuoi: "

;

getline

(

cin

,

str

);

cout

<<

"

\n

Chuoi nhan duoc: "

<<

str

;

cout

<<

"

\n

Do dai chuoi: "

<<

str

.

length

();

Xoa_Khoang_Trang_Thua_Dau_Va_Cuoi

(

str

);

Xoa_Khoang_Trang_Giua_Cac_Tu

(

str

);

In_Hoa_Ki_Tu_Dau_Moi_Tu

(

str

);

cout

<<

"

\n

Chuoi sau khi xu li: "

<<

str

;

system

(

"pause"

);

return

0

;

}