首頁 >後端開發 >C++ >檢查字串是否可以透過反轉任意子字串使其在字典順序上變得更小

檢查字串是否可以透過反轉任意子字串使其在字典順序上變得更小

WBOY
WBOY轉載
2023-08-29 22:21:121106瀏覽

檢查字串是否可以透過反轉任意子字串使其在字典順序上變得更小

在C 中,我們有一個內建的reverse()函數,用於將子字串反轉,以檢查字串是否可以按字典順序變得更小。字典順序是將單字的字元按照字典順序排序的過程。

讓我們以一個字串的例子來檢查字典順序是否較小。

  • 我們將比較這兩個單字以檢查字典順序較小的單字,並採用兩個字串,即 'apple''army'。這兩個字串的第一個字母都以字母 ‘a’ 開頭。當我們檢查兩個字母的第二個字元時,按字母順序,‘p’ 位於 ‘r’ 之前。因此,按字典順序,applearmy小。

  • #在字串“tutorialspoint”中,將子字串“oria”反轉得到“airo”,該子字串在字典序中較小。然後將最終字串寫為“tutairolspoint”

  • 在字串“tutorix”中,將子字串“tori”反轉得到“irot”,因為第一個子字串的起始字元是't',第二個子字串是'i',所以'i'在字母表中位於't'之前,因此'irot'在字典序上小於'tori'。最後的字串寫作“tuirotx”

#我們將採用另一個字串範例,例如“acwz”。

文法

reverse( str_name.begin(), str_name.end() )

說明

reverse函數是C 標準函式庫的一部分,它接受兩個參數“str_name.begin()”和“str_name.end()”。

  • str_name 是使用者建議的字串名稱。

  • begin()end() 是預先定義的內建函數,在反向函數下使用。 begin 函數的工作是傳回一個指向輸入字串的第一個字元的迭代器。 end 函數的作用是傳回一個迭代器,該迭代器指向輸入字串最後一個字元之前的一個位置。

請注意,reverse函數不會傳回任何內容,因為它直接修改了容器(str_name)。

演算法

  • 首先,我們將使用三個必要的頭文件,即 iostream、string 和 include

  • 我們將從主函數開始,其中宣告一個名為‘str’的字串變量,並將字串‘tutorialspoint’儲存在其中。然後,我們將宣告布林變數‘isReverse’‘false’,以表示給定的字串未被反轉,仍為原始形式。

  • #然後我們將建立兩個巢狀的 for 迴圈來檢查 ‘str’ 的每個可能的子字串。然後將子字串儲存在名為 ‘temp’ 的暫存字串中。

  • 之後,我們呼叫'reverse()' 函數來反轉索引'i' 之間儲存在'temp' 變數中的子字串'j'

  • 後來建立一個if語句來檢查反轉後的字串是否依字典順序小於變數‘temp’‘str’進行比較。

  • 編譯器將比較變數 temp 和 str。如果它們都相等,那麼變數 ‘isReverse’ 將被設為 true,並且它將中斷 if 語句。

  • 現在,我們檢查 isReverse 的值,如果為 true,則列印 if 條件語句,否則列印 else 條件語句。

  • 退出程式。

範例

在這個程式中,我們將了解如何透過反轉任何子字串來使字串按字典順序變小。

#include <iostream>
#include <string>
#include <algorithm> 
using namespace std;
int main() {
   string str = "tutorialspoint";
   // User can change this to test other strings such as acwz, groffer, etc
   bool isReverse = false; // it is used to indicate whether or not a substring has been found in the original string “str”.


   // use the loop through all possible substrings of str
   for (int i = 0; i < str.length(); i++) {
      for (int j = i+1; j < str.length(); j++) {
         string temp = str; 
         // create new temporary variable to store the value of str.
         // reverse the substring of i and j
         reverse ( temp.begin() + i, temp.begin() + j + 1 ); 
         // reverse function follow the header file name as <algorithm>
         if (temp < str) { 
            // Check whether the reversed string is lexicographically smaller
            isReverse = true;
            break;
         }
      }
   }
   if ( isReverse ) {
      cout << "Yes, this is lexicographically smaller by reversing a  substring." << endl;
   } else {
      cout << "No, this is not lexicographically smaller by reversing a substring." << endl;
   }
   return 0;
}

輸出

如果我們輸入值“tutorialspoint”,我們會得到以下結果 -

Yes, this is lexicographically smaller by reversing a  substring.

如果我們輸入值“acwz”,我們會得到以下結果:

No, this is not lexicographically smaller by reversing a substring.

結論

我們看到如何透過反轉任何子字串來使用字串變數來計算字典中較小的值。然後我們將字串變數設定為臨時變數。然後我們使用預先定義的函數“reverse()”以相反的形式計算字典單字。接下來,我們透過比較變數temp和str來檢查字典序較小的並且得到結果。

以上是檢查字串是否可以透過反轉任意子字串使其在字典順序上變得更小的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除