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

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

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