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