เราได้รับสตริงที่มีความยาวเท่าใดก็ได้ที่มีทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และภารกิจคือการคำนวณจำนวนอักขระที่มีค่า 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