Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar rentetan kepada bentuk yang mempunyai abcd..z sebagai urutan

Tukar rentetan kepada bentuk yang mempunyai abcd..z sebagai urutan

WBOY
WBOYke hadapan
2023-09-01 14:17:061126semak imbas

Tukar rentetan kepada bentuk yang mempunyai abcd..z sebagai urutan

Penukaran rentetan (juga dikenali sebagai penukaran rentetan) ialah operasi dalam C++ yang menyimpan hasil dalam tatasusunan output selepas keseluruhan proses dilaksanakan. Dalam C++, terdapat fungsi yang dipanggil "transform()", yang wujud dalam direktori persekitaran C++, yang melaluinya kita boleh menukar rentetan menjadi rentetan baharu.

Terdapat dua bentuk fungsi penukaran −

  • Pembedahan tanpa sengaja

    • Operasi
    • digunakan pada setiap elemen tatasusunan input.

    • Selepas operasi selesai, keputusan akan disimpan dalam tatasusunan keluaran.

  • Operasi binari

  • Operasi digunakan pada setiap elemen tatasusunan tertentu.

  • Elemen input pertama dan elemen input kedua yang sepadan mengambil bahagian dalam operasi.

  • Data output akan disimpan dalam tatasusunan output.

Rentetan susulan ialah rentetan baharu yang dijana dengan melakukan pelbagai operasi pada rentetan input (cth. pemadaman). Untuk rentetan seterusnya, operasi berlaku tanpa menjejaskan aksara yang tinggal.

Untuk penukaran rentetan, input mengandungi rentetan operasi dengan panjang n+1. Watak asal tergolong dalam siri a hingga z. Panjang rentetan cetakan dianggap sebagai n di sini, yang merupakan rentetan keluaran.

Dalam artikel ini, kita akan belajar cara menukar rentetan kepada abcd….z sebagai urutan dalam persekitaran C++.

Algoritma rekursif menjana rentetan seterusnya

Dengan menggunakan pendekatan rekursif, di bawah ialah algoritma yang mungkin untuk rentetan seterusnya. Ini adalah rentetan tertentu dan T ialah masa yang diperlukan untuk menyelesaikan operasi.

  • Langkah 1 - Kira bilangan kejadian.

  • Langkah 2 - Jika i = panjang(s) dan j = panjang(T).

  • Langkah 3− Kemudian kembali ke 1.

  • Langkah 4 - Penamat.

  • Langkah 5 - Jika i = panjang(S).

  • Langkah 6 - Kemudian kembalikan 0.

  • Langkah 7 - Penamat.

  • Langkah 8 − Kira

  • Langkah 9 - Jika, j

  • Langkah 10 − Kira

  • Langkah 11 - Penamat.

  • Langkah 12 - Kira

  • Langkah 13 - Kiraan Pulangan.

  • Langkah 14 - Penamat.

Sintaks untuk tatasusunan seterusnya

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])

Di sini kami mencipta sintaks kerja asas untuk tatasusunan seterusnya. Apabila terdapat dua urutan, kita perlu mengikuti langkah berikut untuk mendapatkan output.

Cara mengikuti

  • Kaedah 1−Tukar rentetan menggunakan C++

  • Kaedah 2 melaksanakan operasi unari pada rentetan menggunakan C++

  • Kaedah 3 menggunakan C++ untuk melaksanakan operasi binari pada rentetan

  • Cetak semua kemungkinan rentetan berikutnya menggunakan C++

  • Kaedah 5 untuk menukar rentetan kepada mempunyai abcd….z sebagai susulan menggunakan C++

Tukar rentetan menggunakan C++

Dalam kod C++ ini, kami mencipta rentetan baharu dan mengalih keluar semua vokal daripada rentetan input. # ditambah sebagai ganti vokal ini.

Contoh 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;
}

Output

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

Gunakan C++ untuk melakukan operasi unari pada rentetan

Dalam kod khusus ini, kami menunjukkan cara melaksanakan operasi unari pada tatasusunan input. Fungsi ini menerima penunjuk ke kedudukan mula dan akhir satu input. Dan beroperasi pada permulaan tatasusunan output.

Terjemahan bahasa Cina bagi

Contoh 2

ialah:

Contoh 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;
}

Output

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

Gunakan C++ untuk melakukan operasi binari pada rentetan

Dalam kod khusus ini, kami menunjukkan cara melaksanakan operasi binari pada tatasusunan input. Fungsi transform() menambah penunjuk antara titik permulaan dan tatasusunan input pertama. Ingat bahawa operasi binari sentiasa beroperasi pada dua set data input.

Terjemahan bahasa Cina bagi

Contoh 3

ialah:

Contoh 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;
}

Output

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

Cetak semua rentetan seterusnya menggunakan C++

Gunakan konsep pemilihan dan bukan pemilihan untuk mengetahui semua urutan tatasusunan tertentu. Semasa proses ini, beberapa aksara boleh dialih keluar tanpa mengubah susunan unsur. Di sini, kerumitan masa proses ini ialah O(2^n) dan kerumitan ruang ialah O(n).

Contoh 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;
}

Output

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

Tukar rentetan kepada abcd…z sebagai urutan

Ini adalah proses khusus untuk menukar rentetan kepada bentuk yang mempunyai abcd...z sebagai urutan.

  • Watak permulaan.

  • Jika panjang kurang daripada 26, kembalikan palsu.

  • Lelaran gelung daripada 0 kepada s.size() - 1.

  • Jika aksara mencapai z, keluar dari gelung.

  • Jika watak semasa kurang daripada s atau sama dengan watak.

  • Ganti kenaikan watak semasa dengan 1.

  • Mengembalikan palsu jika aksara kurang daripada atau sama dengan z.

  • Jika tidak, kembalikan benar.

在这个过程中,时间复杂度为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作为子序列。

Atas ialah kandungan terperinci Tukar rentetan kepada bentuk yang mempunyai abcd..z sebagai urutan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam