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

สร้างตัวเลขดั้งเดิมจากภาษาอังกฤษใน C++


สมมติว่าเรามีสตริงที่ไม่ว่างซึ่งมีการแสดงตัวเลข 0-9 ภาษาอังกฤษที่ไม่เรียงลำดับ โดยจะส่งออกตัวเลขในลำดับจากน้อยไปมาก มีคุณสมบัติบางอย่าง -

  • อินพุตรับประกันว่าถูกต้องและสามารถแปลงเป็นตัวเลขดั้งเดิมได้ นั่นหมายถึงไม่อนุญาตให้ป้อนข้อมูลที่ไม่ถูกต้อง เช่น "abc" หรือ "zeone"
  • ความยาวอินพุตน้อยกว่า 50,000

ดังนั้นหากอินพุตเป็นเหมือน “fviefuro” เอาต์พุตจะเป็น 45

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • nums :=อาร์เรย์ที่มีตัวเลขเป็นตัวอักษรภาษาอังกฤษตั้งแต่ 0 ถึง 9
  • ทำการนับขนาด 10 อาร์เรย์หนึ่งอาร์เรย์
  • ans :=สตริงว่าง และ n :=ขนาดของสตริง
  • สำหรับฉันในช่วง 0 ถึง n – 1 ทำ
    • ถ้า s[i] ='z' ให้เพิ่มจำนวน[0] ขึ้น 1
    • ถ้า s[i] ='w' ให้เพิ่มจำนวน[2]ขึ้น 1
    • ถ้า s[i] ='g' ให้เพิ่มจำนวน[8] ขึ้น 1
    • ถ้า s[i] ='x' ให้เพิ่มจำนวน[6] ขึ้น 1
    • ถ้า s[i] ='v' ให้เพิ่มจำนวน[5] ขึ้น 1
    • ถ้า s[i] ='o' ให้เพิ่มจำนวน[1] ขึ้น 1
    • ถ้า s[i] ='s' ให้เพิ่มจำนวน[7] ขึ้น 1
    • ถ้า s[i] ='f' ให้เพิ่มจำนวน[4] ขึ้น 1
    • ถ้า s[i] ='h' ให้เพิ่มจำนวน[3] ขึ้น 1
    • ถ้า s[i] ='i' ให้เพิ่มจำนวน[9] ขึ้น 1
  • นับ[7] :=นับ[7] – นับ[6]
  • นับ[5] :=นับ[5] – นับ[7]
  • นับ[4] :=นับ[4] – นับ[5]
  • นับ[1] :=นับ[1] – (นับ[2] + นับ[4] + นับ[0])
  • นับ[3] :=นับ[3] – นับ[8]
  • นับ[9] :=นับ[9] – (นับ[5] + นับ[6] + นับ[8])
  • สำหรับฉันในช่วง 0 ถึง 9 ทำ
    • สำหรับ j ในช่วง 0 เพื่อนับ[i]
      • ans :=ans + อักขระของ (i + '0')
  • คืนสินค้า

ตัวอย่าง(C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string originalDigits(string s) {
      string nums[]= {"zero", "one", "two", "three", "four", "five", "six", "seven","eight", "nine"};
      vector <int> cnt(10);
      string ans = "";
      int n = s.size();
      for(int i = 0; i < n; i++){
         if(s[i] == 'z')cnt[0]++;
         if(s[i] == 'w') cnt[2]++;
         if(s[i] == 'g')cnt[8]++;
         if(s[i] == 'x')cnt[6]++;
         if(s[i] == 'v')cnt[5]++;
         if(s[i] == 'o')cnt[1]++;
         if(s[i] == 's')cnt[7]++;
         if(s[i] == 'f')cnt[4]++;
         if(s[i] == 'h')cnt[3]++;
         if(s[i] == 'i') cnt[9]++;
      }
      cnt[7] -= cnt[6];
      cnt[5] -= cnt[7];
      cnt[4] -= cnt[5];
      cnt[1] -= (cnt[2] + cnt[4] + cnt[0]);
      cnt[3] -= cnt[8];
      cnt[9] -= (cnt[5] + cnt[6] + cnt[8]);
      for(int i = 0; i < 10; i++){
         for(int j = 0; j < cnt[i]; j++){
            ans += (char)(i + '0');
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.originalDigits("fviefuro");
}

อินพุต

"fviefuro"

ผลลัพธ์

"45"