C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の文字列内の文字のプライム周波数のXOR


この問題では、文字列が与えられます。タスクは、出現頻度が素数である文字列の文字の頻度のXORを出力することです。

問題を理解するために例を見てみましょう

入力 − TutorialsPoint

出力

ここでは、文字列の各文字の出現頻度を確認し、その頻度が素数であるすべての文字のXORを求めます。このため、プライム周波数の配列が作成されます。次に、文字列の文字の頻度をマップに格納し、プライム頻度配列と照合します。一致するものが見つかった場合、xorが見つかります。マップのすべての要素にループすると、必要なXORを見つけることができます。

ソリューションの実装を示すプログラム

#include <bits/stdc++.h>
using namespace std;
void findPrimes(bool prime[], int p_size){
   prime[0] = false;
   prime[1] = false;
   for (int p = 2; p * p <= p_size; p++) {
      if (prime[p]) {
         for (int i = p * 2; i <= p_size; i += p)
            prime[i] = false;
      }
   }
}
int findPrimeXOR(string s){
   bool prime[100005];
   memset(prime, true, sizeof(prime));
   findPrimes(prime, 10005);
   int i, j;
   map<char, int> charFreq;
   for (i = 0; i < s.length(); i++)
      charFreq[s[i]]++;
   int result = 0;
   int flag = 0;
   for (auto i = charFreq.begin(); i != charFreq.end(); i++) {
      if (prime[i->second]) {
         result = result ^ i->second;
         flag = 1;
      }
   }
   if (!flag)
      return -1;
   return result;
}
int main(){
   string s = "tutorialspoint";
   cout<<"The XOR of frequencies of character which have prime frequencies is : ";
   cout<<findPrimeXOR(s);
   return 0;
}

出力

The XOR of frequencies of character which have prime frequencies is : 3

  1. C++で文字列内のすべての文字を切り替えます

    このプログラムは、文字列の文字を大文字に変換します。ただし、このタスクは、c ++クラスライブラリのtoUpper()メソッドを使用して簡単に実行できます。しかし、このプログラムでは、大文字の文字のASCII値を計算することによってこれを実行します。アルゴリズムは次のとおりです。 アルゴリズム START    Step-1: Declare the array of char    Step-2: Check ASCII value of uppercase characters which must grater than A and lesser

  2. C ++のプライム周波数を持つ配列要素?

    配列 同じデータ型の要素のコンテナです。 プライム周波数 配列の要素の出現回数が素数であることを意味します。 したがって、これらの定義に基づいて、プライム周波数を持つ配列要素を見つける問題があります。配列の文字列が与えられます。文字の頻度を見つけて、頻度が素数であるかどうかを確認してから、素数の頻度を持つ要素を数える必要があります。 例を見てみましょう Input: str = “helloworld” Output: 2 説明 文字の出現回数は- h -> 1 e -> 1 l -> 3 o -> 2 w-> 1 r ->