我们给了一个任意长度的字符串,该字符串包含大写和小写字母,任务是计算ASCII值为素数的那些字符的计数。
大写字母[AZ]的ASCII值从65到90开始,小写字母[az]的ASCII值从97到122开始。
Input string str = ‘Aebg’Output count is: 2
说明-A的ASCII值是65,这是一个非素数,因此不会被计算; e是101,这是一个素数,因此它将被计算; b是66,这是一个非素数,因此它不会' t被计数,并且g是103(这是质数),因此将被计数。因此,总共有2个字符具有素ASCII值。
Input − string str = ‘GOXFH’Output − count is: 2
说明-G的ASCII值是71,它是一个质数,因此将被计数; O是79,它是质数,因此将被计数; X是88,它是非质数,因此不会被计数计算得出,F为70,这不是素数,因此不会被计算; H为72,这不是素数,因此不会被计算。因此,总共有2个字符具有素ASCII值。
输入字符串并将其存储在变量中,比如说str
使用length()
函数计算字符串str的长度,该函数将根据字符串中包含空格的字母数返回一个整数值。
声明一个函数来计算素数,我们将根据确定的每个字母检查素数
遍历从i到0直到字符串长度的循环
在循环内部,检查所遍历字符的ASCII值是否为质数。如果是质数,则将计数增加1,否则不要增加值。
返回计数的总值
打印结果。
#include <iostream> #include <vector> using namespace std; #define max_val 257 //查找字符串中的主要字符的功能 int countprime(string str){ //使用SIEVE减少质数 //比等于'max_val' // A Boolean array "prime[0..n]". A //prime [i]中的值最终将为false- //如果我不是素数,否则为真。 vector<bool> prime(max_val + 1, true); //0和1不是质数 prime[0] = false; prime[1] = false; for (int p = 2; p * p <= max_val; p++){ //如果prime [p]不变,则 //这是一个素数 if (prime[p] == true) { //更新p的所有倍数 for (int i = p * 2; i <= max_val; i += p){ prime[i] = false; } } } int result = 0; //遍历整个字符串。 for (int i = 0; i < str.length(); ++i){ if (prime[int(str[i])]){ result++; } } return result; } //主要功能 int main(){ string str = "nhooo"; //打印所需答案 cout <<"count is: "<< countprime(str); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
count is:1