Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các ký tự trong một chuỗi có giá trị ASCII là số nguyên tố trong C ++

Chúng tôi được cung cấp một chuỗi có độ dài bất kỳ chứa cả chữ hoa và chữ thường và nhiệm vụ là tính toán số lượng các ký tự có giá trị ASCII là số nguyên tố.

Các giá trị ASCII của chữ hoa [A-Z] bắt đầu bằng 65 đến 90 và chữ thường [a-z] bắt đầu bằng 97 đến 122.

Ví dụ

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

Giải thích - Giá trị ASCII của A là 65 là số không phải nguyên tố nên sẽ không được tính, e là 101 là số nguyên tố nên sẽ được tính, b là 66 là số không phải nguyên tố nên sẽ không được đếm và g là 103 là số nguyên tố nên sẽ được tính. Do đó, tổng cộng có 2 ký tự có giá trị ASCII nguyên tố.

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

Giải thích - Giá trị ASCII của G là 71 là số nguyên tố nên sẽ được tính, O là 79 là số nguyên tố nên sẽ được tính, X là 88 là số không phải nguyên tố nên sẽ không được tính , F là 70 không phải là số nguyên tố nên sẽ không được tính và H là 72 không phải là số nguyên tố nên sẽ không được tính. Do đó, tổng cộng có 2 ký tự có giá trị ASCII nguyên tố.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập chuỗi và lưu trữ nó trong một biến, giả sử str

  • Tính độ dài của chuỗi str bằng cách sử dụng hàm length () sẽ trả về một giá trị nguyên theo số lượng ký tự trong chuỗi bao gồm cả khoảng trắng.

  • Khai báo một hàm để tính giá trị nguyên tố mà chúng tôi sẽ kiểm tra dựa trên mọi chữ cái được xác định

  • Di chuyển vòng lặp bắt đầu từ i đến 0 cho đến độ dài của một chuỗi

  • Bên trong vòng lặp, hãy kiểm tra xem giá trị ASCII của một ký tự được duyệt qua có phải là số nguyên tố hay không. Nếu đó là một số nguyên tố, thì hãy tăng số lượng lên 1 nếu không, không làm tăng giá trị.

  • Trả về tổng giá trị của số lượng

  • In kết quả.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Số lượng
count is:1