Phương Pháp Nhanh Chóng Để Chuyển Chữ In Thành Chữ Thường Trong C++
Trong bài viết này, chúng ta sẽ khám phá các phương pháp hiệu quả để chuyển đổi chữ in thành chữ thường trong ngôn ngữ lập trình C++. Chúng ta sẽ phân tích và so sánh nhiều cách tiếp cận khác nhau, từ đó xác định phương pháp nhanh nhất dựa trên các kết quả thử nghiệm.
Phiên Bản Tóm Tắt (TL;DR)
-
Không sử dụng
#pragma GCC optimize
:- Sử dụng hàm sau đây để chuyển đổi:
1 2 3
string strlwr_c_cr(const string& input) { return string(strlwr((char*)input.c_str())); }
- Sử dụng hàm sau đây để chuyển đổi:
-
Với
#pragma GCC optimize
:- Hàm chuyển đổi tốt nhất là:
1 2 3 4 5 6 7 8 9
string strlwr_a_cr(const string& input) { string result = input; for (size_t i = 0; i < result.size(); ++i) { if (result[i] >= 'A' && result[i] <= 'Z') { result[i] += 32; } } return result; }
- Hàm chuyển đổi tốt nhất là:
-
Truyền tham số kiểu
const string& str
nhanh hơn so vớistring str
.
Mã Thử Nghiệm
Dưới đây là đoạn mã dùng để kiểm tra hiệu suất của các phương pháp chuyển đổi:
|
|
Kết Quả Thử Nghiệm
Trường Hợp Không Sử Dụng #pragma GCC optimize
Hàm | Thời Gian (ms) | Trung Bình (ms/ký tự) |
---|---|---|
strlwr_a_tolower_cr | 3378 | 0.0034 |
strlwr_a_cr | 3618 | 0.0036 |
strlwr_a_bitwise_operation_cr | 3979 | 0.0040 |
… | … | … |
Hàm nhanh nhất: strlwr_a_tolower_cr
.
Trường Hợp Sử Dụng #pragma GCC optimize
Hàm | Thời Gian (ms) | Trung Bình (ms/ký tự) |
---|---|---|
strlwr_a_cr | 2178 | 0.0022 |
strlwr_e_cr | 2365 | 0.0024 |
strlwr_a_tolower_cr | 2382 | 0.0024 |
… | … | … |
Hàm nhanh nhất: strlwr_a_cr
.
Kiểm Tra Chức Năng
Đoạn mã dưới đây được sử dụng để kiểm tra tính chính xác của các hàm:
|
|
Kết Quả Kiểm Tra
Chuỗi Đầu Ra | Hàm |
---|---|
tquickbfjovethlad.0123456789!@#$%^&*()_+{}:’<>? | strlwr_a_cr |
tquickbfjovethlad.0123456789!@#$%^&*()_+{}:’<>? | strlwr_a |
… | … |
Kết Luận
- Không sử dụng tối ưu hóa:
strlwr_a_tolower_cr
là nhanh nhất. - Sử dụng tối ưu hóa:
strlwr_a_cr
là nhanh nhất. - Truyền tham số kiểu
const string&
nhanh hơn so với truyền theo giá trị.
Chúc bạn thành công trong việc áp dụng những kiến thức này vào dự án của mình!
Nếu có bất kỳ câu hỏi nào, xin vui lòng để lại bình luận.