Rumah >pembangunan bahagian belakang >C++ >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
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++.
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.
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.
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++
Dalam kod C++ ini, kami mencipta rentetan baharu dan mengalih keluar semua vokal daripada rentetan input. # ditambah sebagai ganti vokal ini.
#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
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#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
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#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
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).
#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
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是特定字符串的长度。
#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!