Cho mình hỏi làm thế nào để viết hoa ký tự đầu của mỗi từ khi nhập một chuỗi vào
Input: Toi di hoc tre. Co giao dang giang bai.
Output: Toi Di Hoc Tre. Co Giao Dang Giang Bai.
Cho mình hỏi làm thế nào để viết hoa ký tự đầu của mỗi từ khi nhập một chuỗi vào
Input: Toi di hoc tre. Co giao dang giang bai.
Output: Toi Di Hoc Tre. Co Giao Dang Giang Bai.
Cấu trúc của một chuỗi trong C bạn có thể xem như một mảng các ký tự
với ký tự kết thúc chuỗi cuối cùng là \0
. Cho nên nếu bạn đã học mảng rồi thì sẽ rất dễ hiểu, bạn có thể tham khảo đoạn mã nguồn sau,
#include <stdio.h>
#include <string.h>
// Hàm viết hoa ký tự đầu của mỗi từ trong 1 chuỗi cho trước
char* vietHoaKyTuDau(char *S){
char *ketQua = new char[strlen(S)];
if(S[0] != ' ' && S[0] >= 97)
ketQua[0] = S[0] - 32;
else
ketQua[0] = S[0];
for(int i = 1; i < strlen(S); i++){
ketQua[i] = S[i];
if(S[i] == ' ' && S[i+1] != ' ' && S[i+1] >= 97){
ketQua[i+1] = S[i+1] - 32;
i++;
}
}
ketQua[strlen(S)] = '\0';
return ketQua;
}
int main(){
char S[300];
printf("Nhap vao chuoi Input: ");
fflush(stdin);
fgets(S, 300, stdin);
printf("Output: ");
char* ketQua = vietHoaKyTuDau(S);
puts(ketQua);
}
Mình giải thích một xíu ở đoạn code trên cho bạn dễ hiểu, có 4 ý chính trong hàm vietHoaKyTuDau
mà mình đã sử dụng:
S[0] != ' '
) và chưa được ghi in hoa (S[0] >= 97
) thì chuyển ký tự đầu tiên thành ký tự hoa.S[i] == ' '
) tức là đã có thể kết thúc một từ, ta duyệt xem ký tự tiếp theo có phải là ký tự của từ mới hay không (S[i+1] != ' '
), đồng thời xét điều kiện ký tự S[i+1]
này chưa được in hoa (S[i+1] >= 97
) thì ta thực hiện in hoa nó.\0
tại cuối chuỗi tại vị trí kết thúc.Bạn có thể copy đoạn code về chạy thử để kiểm nghiệm kết quả, có lỗi sai chỗ nào thông báo mình nha.
Bạn có thể sử dụng hàm toupper và viết hoa ký tự đầu mỗi từ trong C++.
Cách sử dụng hàm này xem tại: Chuyển chữ hoa sang chữ thường và ngược lại trong C++