Cách chuyển 1 ký tự sang dạng shilft của nó mà không dùng switch case

Xin chào mọi người,
Hiện tại mình đang gặp vấn đề đó là khi mình nhận 1 ký tự từ bàn phím và muốn nó chuyển sang dạng shilft của kí tự đó, nhưng các ký tự không phải alphabet có dạng shilft của nó không theo 1 quy luật nào cả, nên mình đã dùng switch_case để thực hiện, như này
image
Tuy nhiên mình thấy cách này khá cùi, với dài dòng nên không biết là mọi người có cách nào thực hiện mà không cần dùng switch_case như trên không?

Mình cảm ơn!

Bạn tạo 2 array tương ứng với nhau, rồi gì gì tiếp theo.
[Viết switch case mà không có break]

4 Likes

Oh, đây là một cách tốt rồi mà cậu :smile:
Ngoài ra, cậu có thể chuyển nó thành file (nó sẽ giúp cậu trong TH cậu phải xử lý nhiều key layout khác nhau, khi đó cậu chỉ cần tạo 1 file mới cho key layout mới), sau đó đọc từ file vào một map/dictionary/hash table (để search cho nhanh). Cách này sẽ khiến code của cậu dễ mở rộng + không cần sửa code & recompile lúc cần sửa lại map này (cậu chỉ cần sửa file thôi).

Hope it helps!

5 Likes

Làm sao bạn chắc được shift của 2 là @??
Lỡ người ta xài bàn phím UK thì sao?

7 Likes

Tớ đồng ý với cậu :smile:
Cậu ấy cần thêm đoạn code để detect keyboard layout (tớ hi vọng đã có code đó rồi :smile:).

6 Likes

switch case là một cấu trúc tốt vì nhìn trực quan và tốc độ xử lý nhanh vì nó jump tới case trực tiếp so với if else từng dòng. Mình vote cách này.
Trong trường hợp bạn muốn cảm thấy pro hơn thì sử dụng hashtable std::unordered_map

 std::unordered_map<char, char> m =
    {
        { '`' , '~' },
        { '1' , '!' },
        { '2' , '@' },
        ....
    };

Ngoài ra bạn có thể sử dụng mảng 1 hoặc 2 chiều, tuy nhiên việc sử dụng mảng sẽ không thể đồng thời đạt được tối ưu về speed và space. (Chỉ có thể đạt được 1 trong 2). Với kích thước mảng cực nhỏ thì cũng có thể bỏ qua vấn đề này. Cụ thể:

  • Nếu muốn tối ưu speed thì bạn sẽ thực hiện …
  • Nếu muốn tối ưu space thì bạn sẽ thực hiện …

p.s Nhường chỗ 3 chấm cho bạn nào hứng thú.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?