Tiếp tục là các bài tập giúp các bạn luyện tập kiến thức về chuỗi và xử lý chuỗi trong C. Hôm nay chúng ta cùng nhau đi giải quyết 1 bài tập về xử lý chuỗi: đếm số từ trong chuỗi nhập từ bàn phím sử dụng C/C++. Đồng thời, chúng ta cũng sẽ giải quyết bài toán chuẩn hóa chuỗi luôn nhé.
Bài tập đếm số từ trong chuỗi
- Nhập vào một chuỗi từ bàn phím
- Đếm số từ có trong chuỗi vừa nhập
- Xóa bỏ khoảng trắng ở đầu, giữa và cuối chuỗi
- Viết hoa chữ cái đầu tiên, các chữ cái còn lại viết thường
- In ra số từ và xâu sau khi chuẩn hóa
Input:
Nhap chuoi: LAP trINH khong KHO!
Output:
So tu cua " LAP trINH khong KHO!" la 4 Xau chuan hoa la: Lap trinh khong kho!
Cách đếm số từ trong chuỗi
Ý tưởng: Nếu ký tự hiện tại là dấu cách và ký tự tiếp theo không phải dấu cách thì ta coi đó là bắt đầu của 1 từ.
Lưu ý: Có thể từ đầu tiên không bắt đầu bằng dấu cách.
int WordCount(char str[], int length)
{
int word = (str[0] != ' ');
for (int i = 0; i < length - 1; i++)
{
if (str[i] == ' ' && str[i + 1] != ' ')
{
word++;
}
}
return word;
}Chuẩn hóa chuỗi trong C
Ý tưởng chuẩn hóa chuỗi trong C như sau:
- Bỏ các ký tự khoảng trắng thừa ở đầu chuỗi
- Bỏ các ký tự khoảng trắng thừa ở cuối chuỗi
- Viết hoa chữ cái đầu tiên của chuỗi
- Bỏ qua các khoảng trắng thừa ở giữa
- Đưa tất cả về lowercase
- Viết hoa chữ cái bắt đầu từ theo ý tưởng đếm từ phía trên
void Correct(char str[], int length)
{
int first = 0, last = length - 1;
// Xóa dấu trắng đầu chuỗi
while (first < last && str[first] == ' ')
first++;
// Xóa dấu trắng cuối chuỗi
while (last > first && str[last] == ' ')
last--;
// Viết hoa chữ cái đầu tiên
if (str[first] >= 'a' && str[first] <= 'z')
str[first] -= 32;
for (int i = first + 1; i <= last; i++)
{
// Đưa hết về chữ thường
if (str[i] >= 'A' && str[i] <= 'Z'){
str[i] += 32;
}
if (i + 1 <= last)
{
// Bỏ dấu trắng thừa ở giữa
if (str[i] == str[i + 1] && str[i] == ' ')
{
continue;
}
// Nếu là chữ cái đầu mỗi từ thì viết hoa
if (str[i] == ' ' && str[i + 1] >= 'a' && str[i + 1] <= 'z')
{
str[i + 1] -= 32;
}
}
printf("%c", str[i]);
}
}Lời giải chuẩn hóa chuỗi và đếm số từ trong C
#include <stdio.h>
#include <string.h>
int WordCount(char str[], int length)
{
int word = (str[0] != ' ');
for (int i = 0; i < length - 1; i++)
{
if (str[i] == ' ' && str[i + 1] != ' ')
{
word++;
}
}
return word;
}
void Correct(char str[], int length)
{
int first = 0, last = length - 1;
// Xóa dấu trắng đầu chuỗi
while (first < last && str[first] == ' ')
first++;
// Xóa dấu trắng cuối chuỗi
while (last > first && str[last] == ' ')
last--;
// Viết hoa chữ cái đầu tiên
if (str[first] >= 'a' && str[first] <= 'z')
str[first] -= 32;
for (int i = first + 1; i <= last; i++)
{
// Đưa hết về chữ thường
if (str[i] >= 'A' && str[i] <= 'Z'){
str[i] += 32;
}
if (i + 1 <= last)
{
// Bỏ dấu trắng thừa ở giữa
if (str[i] == str[i + 1] && str[i] == ' ')
{
continue;
}
// Nếu là chữ cái đầu mỗi từ thì viết hoa
if (str[i] == ' ' && str[i + 1] >= 'a' && str[i + 1] <= 'z')
{
str[i + 1] -= 32;
}
}
printf("%c", str[i]);
}
}
int main()
{
char str[100];
// Nhập chuỗi
printf("nNhap chuoi: ");
fgets(str, sizeof str, stdin);
// Do sử dụng fgets nên chuỗi của chúng ta sẽ đọc cả ký tự 'n'.
// Xóa bỏ nó đi.
int length = strlen(str) - 1;
str[length] = ' ';
printf("So tu cua "%s" la %d", str, WordCount(str, length));
printf("nXau chuan hoa la: ");
Correct(str, length);
}Kết quả chạy thử:
PS G:c_courcesday_61> g++ .ChuanHoa.cpp -o .ChuanHoa PS G:c_courcesday_61> .ChuanHoa.exe Nhap chuoi: LAP trINH khong KHO! So tu cua " LAP trINH khong KHO!" la 4 Xau chuan hoa la: Lap trinh khong kho
Theo dõi lập trình không khó tại:



Để lại một bình luận