เราได้รับสตริงที่มีตัวอักษรพิมพ์ใหญ่และเล็ก งานคือการนับตัวอักษรที่มีค่า ASCII เป็นจำนวนเฉพาะ
ค่า ASCII
A-Z: 65-90 | a-z: 97-122
ตัวอย่าง
Input − string str = "Aebg" Output − count is: 2
คำอธิบาย − A(65) ไม่ใช่เฉพาะ, e(101) เป็นเฉพาะ, b(98) ไม่ใช่, g(103) เป็นเฉพาะ รวม 2 ตัว
Input − string str = "GOXFH" Output − count is: 2
คำอธิบาย − G(71) เฉพาะ, O(79) เฉพาะ, X(88) ไม่ใช่, F(70) ไม่ใช่, H(72) ไม่ใช่ รวม 2 ตัว
แนวทางการแก้ปัญหา
- ใช้ Sieve of Eratosthenes หาจำนวนเฉพาะถึง 256 (ค่า ASCII สูงสุด)
- สร้าง boolean array prime[]
- วนลูปสตริง ตรวจสอบ prime[ASCII] ถ้า true เพิ่มตัวนับ
ตัวอย่างโค้ด C++
#include <iostream>
#include <vector>
using namespace std;
#define MAX_VAL 257
int countPrimeASCII(string str) {
vector prime(MAX_VAL + 1, true);
prime[0] = prime[1] = false;
for (int p = 2; p * p <= MAX_VAL; p++) {
if (prime[p]) {
for (int i = p * 2; i <= MAX_VAL; i += p)
prime[i] = false;
}
}
int result = 0;
for (char c : str) {
if (prime[static_cast(c)]) result++;
}
return result;
}
int main() {
string str = "tutorialspoint";
cout << "count is: " << countPrimeASCII(str);
return 0;
}
ผลลัพธ์
count is: 1
บทความนี้แสดงวิธีนับตัวอักษรที่มีค่า ASCII เป็นจำนวนเฉพาะโดยใช้ Sieve of Eratosthenes สร้างตารางจำนวนเฉพาะถึง 256 แล้วตรวจสอบแต่ละตัวอักษรในสตริง