Bài 61. Đếm Số Từ Trong Chuỗi C/C++ - Lập Trình Không Khó

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é.

  1. Bài tập đếm số từ trong chuỗi
  2. Cách đếm số từ trong chuỗi
  3. Chuẩn hóa chuỗi trong C
  4. Lời giải chuẩn hóa chuỗi và đếm số từ trong C

Bài tập đếm số từ trong chuỗi

  1. Nhập vào một chuỗi từ bàn phím
  2. Đếm số từ có trong chuỗi vừa nhập
  3. Xóa bỏ khoảng trắng ở đầu, giữa và cuối chuỗi
  4. Viết hoa chữ cái đầu tiên, các chữ cái còn lại viết thường
  5. 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:

  1. Bỏ các ký tự khoảng trắng thừa ở đầu chuỗi
  2. Bỏ các ký tự khoảng trắng thừa ở cuối chuỗi
  3. Viết hoa chữ cái đầu tiên của chuỗi
  4. Bỏ qua các khoảng trắng thừa ở giữa
  5. Đưa tất cả về lowercase
  6. 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:

  • Forum: https://www.facebook.com/groups/LapTrinhKhongKho/
  • Youtube: https://www.youtube.com/HieuNguyenVanOfficial

Từ khóa » Hàm Chuẩn Hóa Chuỗi Trong C