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

นับอักขระในสตริงที่มีค่า ASCII เป็นจำนวนเฉพาะใน C++


เราได้รับสตริงที่มีความยาวเท่าใดก็ได้ที่มีทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และภารกิจคือการคำนวณจำนวนอักขระที่มีค่า ASCII เป็นจำนวนเฉพาะ

ค่า ASCII ของตัวอักษรพิมพ์ใหญ่[A-Z] เริ่มต้นด้วย 65 ถึง 90 และตัวอักษรพิมพ์เล็ก[a-z] เริ่มต้นด้วย 97 ถึง 122

ตัวอย่าง

Input string str = ‘Aebg’
Output count is: 2

คำอธิบาย − ค่า ASCII สำหรับ A คือ 65 ซึ่งเป็นจำนวนที่ไม่ใช่จำนวนเฉพาะจึงไม่ถูกนับ e คือ 101 ซึ่งเป็นจำนวนเฉพาะจึงจะถูกนับ b คือ 66 ซึ่งเป็นจำนวนที่ไม่ใช่จำนวนเฉพาะจึงไม่ จะถูกนับและ g คือ 103 ซึ่งเป็นจำนวนเฉพาะจึงจะถูกนับ ดังนั้น จึงมีอักขระทั้งหมด 2 ตัวที่มีค่า ASCII เฉพาะ

Input − string str = ‘GOXFH’
Output − count is: 2

คำอธิบาย − ค่า ASCII สำหรับ G คือ 71 ซึ่งเป็นจำนวนเฉพาะจึงจะถูกนับ O คือ 79 ซึ่งเป็นจำนวนเฉพาะจึงจะถูกนับ X คือ 88 ซึ่งเป็นจำนวนที่ไม่ใช่จำนวนเฉพาะจึงไม่ถูกนับ , F คือ 70 ซึ่งไม่ใช่จำนวนเฉพาะจึงไม่ถูกนับและ H คือ 72 ซึ่งไม่ใช่จำนวนเฉพาะจึงไม่ถูกนับ ดังนั้น จึงมีอักขระทั้งหมด 2 ตัวที่มีค่า ASCII เฉพาะ

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนสตริงและเก็บไว้ในตัวแปร สมมติว่า str

  • คำนวณความยาวของสตริง str โดยใช้ฟังก์ชัน length() ที่จะคืนค่าจำนวนเต็มตามจำนวนตัวอักษรในสตริงรวมทั้งช่องว่าง

  • ประกาศฟังก์ชันคำนวณค่าเฉพาะที่เราจะตรวจสอบกับทุกตัวอักษรที่กำหนด

  • ข้ามลูปโดยเริ่มจาก i ถึง 0 จนถึงความยาวของสตริง

  • ภายในลูป ให้ตรวจสอบว่าค่า ASCII ของอักขระที่ข้ามผ่านเป็นจำนวนเฉพาะหรือไม่ หากเป็นจำนวนเฉพาะ ให้เพิ่มจำนวนขึ้นอีก 1 ค่าจะไม่เพิ่มมูลค่า

  • ส่งคืนค่าจำนวนนับ

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <iostream>
#include <vector>
using namespace std;
#define max_val 257
// Function to find prime characters in the string
int countprime(string str){
   // Using SIEVE for finding the prime numbers less
   // than Equal to 'max_val'
   // A Boolean array "prime[0..n]". A
   // value in prime[i] will finally be false
   // if i is Not a prime, else true.
   vector<bool> prime(max_val + 1, true);
   // 0 and 1 are not primes
   prime[0] = false;
   prime[1] = false;
   for (int p = 2; p * p <= max_val; p++){
      // If prime[p] is not changed, then
      // it is a prime
      if (prime[p] == true) {
         // Upfating the all multiples of p
         for (int i = p * 2; i <= max_val; i += p){
            prime[i] = false;
         }
      }
   }
   int result = 0;
   // traversing the whole string.
   for (int i = 0; i < str.length(); ++i){
      if (prime[int(str[i])]){
         result++;
      }
   }
   return result;
}
// main function
int main(){
   string str = "tutorialspoint";
   // print required answer
   cout <<"count is: "<< countprime(str);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

count is:1