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