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

ค้นหาอักขระที่ k ของสตริงถอดรหัสใน C++


สมมติว่าเรามีสตริงที่เข้ารหัสหนึ่งสตริง ซึ่งการทำซ้ำของสตริงย่อยจะแสดงเป็นสตริงย่อยตามด้วยจำนวนสตริงย่อย ดังนั้นหากสตริงเป็นเหมือน ab2cd2 แสดงว่าเป็น ababcdcd และหาก k =4 สตริงจะส่งคืนอักขระ kth นั่นคือ b ที่นี่

ในการแก้ปัญหานี้ เราเริ่มใช้สตริงที่ถอดรหัสแล้วว่างเปล่า จากนั้นคลายการบีบอัดสตริงโดยการอ่านสตริงย่อยและความถี่ของสตริงนั้นทีละรายการ จากนั้นต่อท้ายสตริงย่อยปัจจุบันในสตริงที่ถอดรหัสแล้วตามความถี่ เราจะทำซ้ำขั้นตอนนี้จนกว่าสตริงจะหมด และพิมพ์อักขระ Kth จากสตริงที่ถอดรหัสแล้ว

ตัวอย่าง

#include<iostream>
using namespace std;
char findKthCharacter(string str,int k) {
   string decrypted = "";
   string temp;
   int occurrence = 0;
   for (int i=0; str[i]!='\0'; ){
      temp = "";
      occurrence = 0;
      while (str[i]>='a' && str[i]<='z'){
         temp += str[i];
         i++;
      }
      while (str[i]>='1' && str[i]<='9') {
         occurrence = occurrence*10 + str[i] - '0';
         i++;
      }
      for (int j=1; j<=occurrence; j++)
      decrypted = decrypted + temp;
   }
   if (occurrence==0)
   decrypted = decrypted + temp;
   return decrypted[k-1];
}
int main() {
   string str = "ab4c12ed3";
   int k = 21;
   cout << k << "th character in decrypted string: " << findKthCharacter(str, k);
}

ผลลัพธ์

21th character in decrypted string: e