/* 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
;
}