대문자와 소문자를 모두 포함하는 임의의 길이의 문자열이 제공되며 작업은 ASCII 값이 소수인 문자의 수를 계산하는 것입니다.
대문자[A-Z]의 ASCII 값은 65부터 90까지, 소문자[a-z]는 97부터 122까지입니다.
예
Input string str = ‘Aebg’ Output count is: 2
설명 − A에 대한 ASCII 값은 65로 소수가 아니므로 계산되지 않으며, e는 소수이므로 101로 계산되며, b는 66이므로 소수가 아니므로 계산되지 않습니다. 수를 세고 g는 103인 소수이므로 세게 됩니다. 따라서 프라임 ASCII 값을 갖는 총 2개의 문자가 있습니다.
Input − string str = ‘GOXFH’ Output − count is: 2
설명 − G의 ASCII 값은 71(소수이므로 계산), O는 79(소수이므로 계산), X는 88(소수가 아니므로 계산되지 않음) , F는 소수가 아니므로 계산되지 않는 70이고 H는 소수가 아니므로 계산되지 않는 72입니다. 따라서 프라임 ASCII 값을 갖는 총 2개의 문자가 있습니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
문자열을 입력하고 변수에 저장합니다. str
-
공백을 포함한 문자열의 문자 수에 따라 정수 값을 반환하는 length() 함수를 사용하여 문자열 str의 길이를 계산합니다.
-
결정된 모든 문자에 대해 확인할 소수 값을 계산하는 함수를 선언합니다.
-
문자열의 길이까지 i에서 0까지 루프를 순회합니다.
-
루프 내에서 순회하는 문자의 ASCII 값이 소수인지 확인합니다. 소수인 경우 개수를 1씩 늘리고 그렇지 않으면 값을 늘리지 않습니다.
-
count의 총 값을 반환합니다.
-
결과를 인쇄하십시오.
예
#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