首頁 >後端開發 >C++ >將一個字串轉換為其具有abcd..z作為子序列的形式

將一個字串轉換為其具有abcd..z作為子序列的形式

WBOY
WBOY轉載
2023-09-01 14:17:061191瀏覽

將一個字串轉換為其具有abcd..z作為子序列的形式

字串轉換(也稱為字串轉換)是 C 中的一種操作,在整個過程執行後,將結果儲存在輸出陣列中。在C 中,有一個名為「transform()」的函數,存在於C 環境的目錄中,透過它我們可以將字串轉換為新的字串。

有兩種形式的轉換函數−

  • 一元運算

    • #操作應用於輸入陣列的每個元素。

    • 手術完成後,結果將儲存在一個輸出陣列中。

  • 二元運算

  • 操作適用於特定陣列的每個元素。

  • 第一個輸入元素和第二個對應的輸入元素參與了操作。

  • 輸出資料將儲存在一個輸出數組中。

子序列字串是由對輸入字串執行各種操作(例如:刪除)產生的全新字串。對於子序列字串,操作發生時不會影響剩餘的字元。

對於字串轉換,輸入包含長度為n 1的操作字串。原始字元屬於a到z的系列。列印字串的長度在這裡被視為n,這裡是一個輸出字串。

在本文中,我們將學習如何在C 環境中轉換一個字串,使其具有abcd….z作為一個子序列。

遞歸演算法產生後續字串

透過使用遞歸方法,下面是一個可能的演算法用於一個後續字串。這是特定的字串,T是完成操作所需的時間。

  • 步驟 1 - 計算出現次數。

  • 步驟2 - 如果i = length(s)且j = length(T)。

  • 第三步−然後回傳1。

  • 第4步 - 結束。

  • 步驟5 - 如果i = length(S)。

  • 步驟6 - 然後回傳0。

  • 第7步 - 結束。

  • 步驟 8 − 計數

  • 步驟9 - 如果,j

  • 步驟10 − Count

  • #第11步 - 結束。

  • 第12步 - Count

  • 第13步 - 返回計數。

  • 第14步 - 結束。

後續陣列的語法

Here, we have two given sequences. X and Y.
Initialize a table with a dimension of X.length * Y.length
X.label1 = X
Y.label2 = Y
CS1[0][] = 0
CS2[][0] = 0
Start from CS[1][1]
Compare X[i] and Y[j]
   If
      X[i] = Y[j]
      CS[i][j] = 1 + CS[i-1, j-1]
      Point an arrow to CS[i][j]
   Else
      CS[i][j] = max(CS[i-1][j], CS[i][j-1])
      Point an arrow to max(CS[i-1][j], CS[i][j-1])

這裡我們建立了一個後續陣列的基本工作語法。當有兩個序列時,我們必須按照以下步驟來取得輸出。

跟隨的方法

  • 方法1−使用C 轉換字串

  • 透過使用C 對字串進行一元操作的方法2

  • #使用C 對字串進行二進位操作的方法3

  • #使用C 列印所有可能的後續字串

  • 使用C 將字串轉換為具有abcd….z作為子序列的方法5

#使用 C 轉換字串

在這段C 程式碼中,我們創建了一個新的字串,並從輸入字串中刪除了所有的元音字母。在這些元音字母的位置上添加了#。

範例 1

#include <bits/stdc++.h>
using namespace std;
string change_case(string r) {
   int l = r.length();
   for(int i = 0 ; i < l ; i++) {
      if(r[i] >= 'a' && r[i] <= 'z')
      r[i] = r[i] - 32;
      else if(r[i] >= 'A' && r[i] <= 'Z')
      r[i] = r[i] + 32;
   }
   return r;
}
string delete_vowels(string a) {
   string temp = "";
   int l = a.length();
   for(int i = 0 ; i < l ; i++) {
      if(a[i] != 'a' && a[i] != 'e' &&
      a[i] != 'i' && a[i] != 'o' &&
      a[i] != 'u' && a[i] != 'A' &&
      a[i] != 'E' && a[i] != 'O' &&
      a[i] != 'U'&& a[i] != 'I')
      temp += a[i];
   }
   return temp;
}
string insert_hash(string a) {
   string temp = "";
   int l = a.length();
   for(int i = 0 ; i < l ; i++) {
      if((a[i] >= 'a' && a[i] <= 'z') ||
      (a[i] >= 'A' && a[i] <= 'Z'))
      temp = temp + '#' + a[i];
      else
      temp = temp + a[i];
   }
   return temp;
}
void transformSting(string a) {
   string b = delete_vowels(a);
   string c = change_case(b);
   string d = insert_hash(c);
   if(d=="")
   cout<<"-1"<<endl;
   else
   cout << d<<endl;
}
int main() {
   string a = "RudraDevDas!!";
   string b = "aeiou";
   transformSting(a);
   transformSting(b);
   return 0;
}

輸出

#r#D#R#d#V#d#S!!
-1

使用C 對字串進行一元操作

在這段特定的程式碼中,我們展示瞭如何對輸入數組進行一元操作。此函數接受一個指向單一輸入的起始和結束位置的指標。並在輸出數組的起始位置進行操作。

Example 2

的中文翻譯為:

範例2

#include <iostream>
#include <algorithm>
using namespace std;
int op_increment (int x) {
   x = x + 1;
   return x;
}
int main () {
   int n = 5;
   int input_array[] = {7, 16, 10, 97, 2001};
   int output_array[n];
   std::cout << "Input array present here:";
   for(int i=0; i<5; i++){
      cout << ' ' << input_array[i];
   }
   cout << '\n';
   transform (input_array, input_array+5, output_array, op_increment);
   std::cout << "The output array now contains with:";
   for(int i=0; i<5; i++){
      cout << ' ' << output_array[i];
   }
   cout << '\n';
   return 0;
}

輸出

Input array present here: 7 16 10 97 2001
The output array now contains with: 8 17 11 98 2002

使用C 對字串進行二進位操作

在這段特定的程式碼中,我們展示瞭如何在輸入數組上進行二進位操作。函數transform()在起始點和第一個輸入陣列之間加入了一個指標。請記住,二進位操作總是在兩個輸入資料集上進行。

Example 3

的中文翻譯為:

範例 3

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int op_add (int i, int j) {
   return i+j;
}
int main () {
   int n = 5;
   int arr1[] = {7, 16, 10, 2001, 1997};
   int arr2[] = {1, 2, 3, 4, 5};
   int output[n];
   std::cout << "Input data in array1:";
   for(int i=0; i<n; i++){
      cout << ' ' << arr1[i];
   }
   cout << '\n';
   std::cout << "Input data in array2:";
   for(int i=0; i<n; i++){
      cout << ' ' << arr2[i];
   }
   cout << '\n';
   std::transform (arr1, arr1+n, arr2, output, op_add);
   std::cout << "Output array is here now:";
   for(int i=0; i<5; i++){
      cout << ' ' << output[i];
   }
   cout << '\n';
   return 0;
}

輸出

Input data in array1: 7 16 10 2001 1997
Input data in array2: 1 2 3 4 5
Output array is here now: 8 18 13 2005 2002

使用C 列印所有後續字串

應用選擇和不選擇的概念來找出特定陣列的所有子序列。在這個過程中,可能會刪除一些字元而不改變元素的順序。在這裡,這個過程的時間複雜度是O(2^n),空間複雜度是O(n)。

範例 4

#include <bits/stdc++.h>
using namespace std;
void printSubsequence(string input, string output) {
   if (input.empty()) {
      cout << output << endl;
      return;
   }
   printSubsequence(input.substr(1), output + input[0]);
   printSubsequence(input.substr(1), output);
}
int main() {
   string output = "";
   string input = "rudraabonikoaa";
   printSubsequence(input, output);
   return 0;
}

輸出

rudraabonikoaa
rudraabonikoa
rudraabonikoa
rudraaboniko
rudraabonikaa
rudraabonika
rudraabonika
rudraabonik
rudraabonioaa
rudraabonioa
rudraabonioa
rudraabonio
rudraaboniaa
rudraabonia
rudraabonia

將字串轉換為其具有abcd…z作為子序列

這是一種特定的過程,用於將字串轉換為具有abcd...z作為子序列的形式。

  • 初始化字元。

  • 如果長度小於26,則傳回false。

  • 迭代循環從0到s.size() - 1。

  • 如果字元達到z,則跳出循環。

  • 如果目前字元小於s或等於字元。

  • 將目前字元的增量替換為1。

  • 如果字元小於或等於 z,則傳回 false。

  • 否則,回傳true。

在这个过程中,时间复杂度为O(n),辅助空间为O(1)。这里,n是特定字符串的长度。

Example 5

的中文翻译为:

示例5

#include <bits/stdc++.h>
using namespace std;
bool transformString(string& s) {
   char ch = 'a';
   if (s.size() < 26)
   return false;
   for (int i = 0; i < s.size(); i++) {
      if (int(ch) > int('z'))
      break;
      if (s[i] <= ch) {
         s[i] = ch;
         ch = char(int(ch) + 1);
      }
   }
   if (ch <= 'z')
   return false;
   return true;
}
int main() {
   string str = "aaaaaaaaaaaaaaaaaaaaaaaaaaa";
   if (transformString(str))
   cout << str << endl;
   else
   cout << "Not Possible" << endl;
   return 0;
}

输出

abcdefghijklmnopqrstuvwxyza

结论

在本文中,我们学习了使用C++环境进行字符串转换及其不同形式。通过遵循特定的算法和语法,我们检查和构建了一些不同的C++代码,并了解了如何转换字符串,使其具有abcd...z作为子序列。

以上是將一個字串轉換為其具有abcd..z作為子序列的形式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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