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

C++の文字列でセルに複数回アクセスできるかどうかを確認します


ドット(。)と数字の付いた文字列があるとします。ドットはセルが空であることを示し、セルに数字xがある場合は、文字列内でxステップ右または左に移動できることを示します。私たちの仕事は、セルを複数回訪問できるかどうかを確認することです。たとえば、文字列が「。 2。 。 。 2。 。」とすると、2つの異なる方法で4番目のセルにアクセスできます。 2番目のセルから右に2ステップ、またはセル6から左に2ステップ。

ストリングのi番目のセルにアクセスできる回数を追跡するために、visited[]という1つの配列を使用します。次に、文字列をトラバースし、現在の文字がドットか数字かを確認します。ドットの場合は何もせず、xの場合は数を増やし、[i – x、i + x]の範囲内の訪問済み配列の訪問数を1増やします。訪問済み配列をトラバースすることにより、部屋が訪問された場合複数回かどうか。

#include <iostream>
#include <queue>
using namespace std;
class Node {
   public:
   int key;
   Node *left, *right;
};
Node* getNode(int key) {
   Node* newNode = new Node;
   newNode->key = key;
   newNode->left = newNode->right = NULL;
   return newNode;
}
bool isLevelWiseSorted(Node* root) {
   int prevMax = INT_MIN;
   int min_val, max_val;
   int levelSize;
   queue<Node*> q;
   q.push(root);
   while (!q.empty()) {
      levelSize = q.size();
      min_val = INT_MAX;
      max_val = INT_MIN;
      while (levelSize > 0) {
         root = q.front();
         q.pop();
         levelSize--;
         min_val = min(min_val, root->key);
         max_val = max(max_val, root->key);
         if (root->left)
            q.push(root->left);
         if (root->right)
            q.push(root->right);
      }
      if (min_val <= prevMax)
         return false;
         prevMax = max_val;
   }
   return true;
}
int main() {
   Node* root = getNode(1);
   root->left = getNode(2);
   root->right = getNode(3);
   root->left->left = getNode(4);
   root->left->right = getNode(5);
   root->right->left = getNode(6);
   root->right->right = getNode(7);
   if (isLevelWiseSorted(root))
      cout << "Tree is levelwise Sorted";
   else
      cout << "Tree is Not levelwise sorted";
}

出力

Tree is level wise Sorted

  1. 文字列にC++のサブ文字列が含まれているかどうかを確認します

    ここでは、文字列ライブラリ関数を使用してC++で文字列を照合する方法を説明します。ここでは、find()操作を使用して、サブストリングのオカレンスをメインストリングに取得しています。このfind()メソッドは、文字列が見つかった最初の場所を返します。ここでは、このfind()関数を複数回使用して、すべての一致を取得しています。 アイテムが見つかった場合、この関数は位置を返します。ただし、見つからない場合は、string::nposを返します。 したがって、サブ文字列がメイン文字列に存在するかどうかを確認するには、find()の戻り値がstring::nposであるかどうかを確認する必要があ

  2. C / C ++文字列がintであるかどうかを確認するにはどうすればよいですか?

    文字列がintであるかどうかを確認する方法はいくつかあり、そのうちの1つは、isdigit()を使用して文字列を確認する方法です。 これは、文字列がC++言語でintであるかどうかを確認する例です。 例 #include<iostream> #include<string.h> using namespace std; int main() {    char str[] = "3257fg";    for (int i = 0; i < strlen(str); i++) {   &n