Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเปลี่ยนขนาดตัวอักษรใน C++


สมมติว่าเรามีสตริงที่มีตัวอักษรและตัวเลข เราต้องสร้างชุดค่าผสมที่เป็นไปได้ทั้งหมดของสตริงนั้นโดยใช้ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กที่มีอยู่ในสตริง ดังนั้นหากสตริงหนึ่งมีตัวเลขเท่านั้น จะส่งกลับเท่านั้น สมมติว่าสตริงเป็นเหมือน “1ab2” จากนั้นสตริงจะเป็น [“1ab2”, “1Ab2”, “1aB2”, “1AB2”]

เพื่อแก้ปัญหานี้ เราจะใช้วิธีการแบบเรียกซ้ำ ต้องใช้พารามิเตอร์ดัชนีเพื่อเริ่มทำงานจากดัชนีนั้น นอกจากนี้ยังใช้สตริงชั่วคราวในการสร้างผลลัพธ์ เมื่อดัชนีเท่ากับความยาวของสตริง ให้ส่งคืนสตริงชั่วคราว สำหรับดัชนีที่กำหนด หากเป็นอักษรตัวพิมพ์เล็ก ให้เป็นตัวพิมพ์ใหญ่หรือกลับกัน จากนั้นให้ทำงานซ้ำ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector <string> res;
   void solve(string s, int idx = 0, string temp = ""){
      if(idx == s.size()){
         res.push_back(temp);
         return;
      }
      solve(s, idx + 1, temp + s[idx]);
      int diff = 'a' - 'A';
      if(s[idx] >= 'a' && s[idx] <= 'z'){
         char x = (s[idx] - diff);
         solve(s, idx + 1, temp + x);
      }
      else if (s[idx] >= 'A' && s[idx] <= 'Z'){
         char x = (s[idx] + diff);
         solve(s, idx + 1, temp + x);
      }
   }
   vector<string> letterCasePermutation(string S) {
      res.clear();
      solve(S);
      return res;
   }
};
main(){
   Solution ob;
   print_vector(ob.letterCasePermutation("1ab2"));
   print_vector(ob.letterCasePermutation("9876"));
}

อินพุต

"1ab2"
"9876"

ผลลัพธ์

[1ab2, 1aB2, 1Ab2, 1AB2, ]
[9876, ]