Hướng dẫn cho Chuyển hoá xâu


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: dang7rickroll

Spoiler Alert

(Lưu ý: Ở trong bài này mình sẽ đề cập tới 2 cách làm. Nếu bạn có cách nào ngoài 2 cách này, bạn có thể góp ý với mình)


Cách \(1\)

Với cách này, ta cần phải quan sát vào bảng mã \(ASCII\) để sử dụng cách \(1\) này.

  • Ta nhận thấy: chữ a thường trong bảng mã ASCII có mã là \(97\), còn chữ A hoa có mã là \(65\), cách nhau \(32\) mã. Đối với ký tự thường và ký tự hoa còn lại trong bảng chữ cái cũng vậy.

Vậy ta có kết luận: Để đổi chữ hoa sang chữ thường, thì ta chỉ cần lấy ký tự hoa cộng với \(32\), và ngược lại.

Vì vậy, ta có được hướng làm của cách \(1\):

  • Ta duyệt qua toàn xâu (chạy \(i\) từ \(0\) đến \(s.size()−1\)):
    • Nếu như ký tự \(i\) là nguyên âm thường thì ta sẽ trừ ký tự cho \(32\).
    • Nếu như ký tự \(i\) là nguyên âm hoa và phụ âm thường thì ta vẫn giữ nguyên.
    • Nếu như ký tự \(i\) là phụ âm hoa thì ta sẽ cộng ký tự với \(32\).

Cách \(2\)

Với cách này, ta sử dụng hàm đổi chữ hoa thành chữ thường.

  • Với cách này, ta cũng duyệt qua toàn xâu:
    • Nếu như ký tự \(i\)nguyên âm thường, ta chỉ in ra nguyên âm hoa, còn nguyên âm hoa thì ta giữ nguyên.
    • Nếu như ký tự \(i\)phụ âm hoa, ta sử dụng hàm std::transform(s.begin(), s.end(),s.begin(),::tolower) để đổi chữ hoa sang chữ thường, sau đó in ra ký tự đã đổi.
    • Nếu như ký tự \(i\)phụ âm thường, thì ta vẫn giữ nguyên.

\(Accepted\) \(Code\)

(Chỉ dùng để tham khảo, vui lòng không chép. Đó là sự tôn trọng chính đáng dành cho người viết editorial)


Code tại đây



Bình luận


  • 0
    spiderman    10:16 a.m. 3 Tháng 9, 2023

    code python:

    t=int(input())
    for _ in range(t):
        s=input()
        a=['u','e','o','a','i','U','E','O','A','I','U']
        p=''
        for i in s:
            if not i in a:
                p=p+i.lower()
            else:
                p=p+i.upper()
        print(p)
    

    1 phản hồi

    • 1
      quoc07bk    6:47 p.m. 2 Tháng 11, 2021

      Cho em hỏi là lệnh này nghĩa là gì ạ. Em cảm ơn.
      " transform(s.begin(), s.end(),s.begin(),::tolower); "

      1 phản hồi

      • 1
        dang7rickroll    4:23 p.m. 29 Tháng 8, 2021

        Code tham khảo cho bạn nào lười mở link:

        C++
        #include<bits/stdc++.h>
        using namespace std;
        
        #define int long long
        const int MOD = 1e9 + 7;
        const int N = 2e5 + 5;
        
        signed main()
        {
          ios_base::sync_with_stdio(0);
          cin.tie(0);
          cout.tie(0);
          int q;
          cin >> q;
          while(q--)
          {
            string s;
            cin >> s;
            for (int i = 0;i<=s.size()-1;i++)
            {
                if (s[i]=='a'||s[i]=='A') cout << "A";
                  else if (s[i]=='e'||s[i]=='E') cout << "E";
                  else if (s[i]=='o'||s[i]=='O') cout << "O";
                  else if (s[i]=='i'||s[i]=='I') cout << "I";
                  else if (s[i]=='u'||s[i]=='U') cout << "U";
                else 
                {
                    std::transform(s.begin(), s.end(),s.begin(),::tolower);
                    cout << s[i];
                }
            }
            cout << endl;
          }
          return 0;
        }