Maison  >  Article  >  développement back-end  >  Convertir une chaîne en un formulaire ayant abcd..z comme sous-séquence

Convertir une chaîne en un formulaire ayant abcd..z comme sous-séquence

WBOY
WBOYavant
2023-09-01 14:17:061126parcourir

Convertir une chaîne en un formulaire ayant abcd..z comme sous-séquence

La conversion de chaîne (également connue sous le nom de conversion de chaîne) est une opération en C++ qui stocke le résultat dans le tableau de sortie une fois l'ensemble du processus exécuté. En C++, il existe une fonction appelée "transform()", qui existe dans le répertoire de l'environnement C++, grâce à laquelle nous pouvons convertir une chaîne en une nouvelle chaîne.

Il existe deux formes de fonctions de conversion −

  • Opération unaire

    • L'opération
    • est appliquée à chaque élément du tableau d'entrée.

    • Une fois l'opération terminée, les résultats seront stockés dans un tableau de sortie.

  • Opérations binaires

  • Les opérations s'appliquent à chaque élément d'un tableau spécifique.

  • Le premier élément d'entrée et le deuxième élément d'entrée correspondant participent à l'opération.

  • Les données de sortie seront stockées dans un tableau de sortie.

Les chaînes de sous-séquence sont des chaînes complètement nouvelles générées en effectuant diverses opérations sur la chaîne d'entrée (par exemple, suppression). Pour les chaînes de sous-séquence, l’opération se produit sans affecter les caractères restants.

Pour la conversion de chaîne, l'entrée contient une chaîne d'opération de longueur n+1. Les personnages originaux appartiennent aux séries a à z. La longueur de la chaîne d'impression est ici traitée comme n, qui est une chaîne de sortie.

Dans cet article, nous apprendrons comment convertir une chaîne pour avoir abcd….z comme sous-séquence dans un environnement C++.

L'algorithme récursif génère les chaînes suivantes

En utilisant une approche récursive, vous trouverez ci-dessous un algorithme possible pour une chaîne suivante. Il s'agit d'une chaîne spécifique et T est le temps nécessaire pour terminer l'opération.

  • Étape 1 - Comptez le nombre d'occurrences.

  • Étape 2 - Si i = longueur(s) et j = longueur(T).

  • Étape 3− Revenez ensuite à 1.

  • Étape 4 – La fin.

  • Étape 5 - Si i = longueur (S).

  • Étape 6 - Puis retournez 0.

  • Étape 7 – La fin.

  • Étape 8 - Comptez

  • Étape 9 - Si, j

  • Étape 10 - Compte

  • Étape 11 – La fin.

  • Étape 12 - Count

  • Étape 13 - Compte de retour.

  • Étape 14 – La fin.

Syntaxe pour les tableaux suivants

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

Ici, nous créons une syntaxe de travail de base pour les tableaux suivants. Lorsqu'il y a deux séquences, nous devons suivre les étapes suivantes pour obtenir le résultat.

Comment suivre

  • Méthode 1−Convertir une chaîne en utilisant C++

  • Méthode 2 pour effectuer des opérations unaires sur des chaînes en utilisant C++

  • Méthode 3 d'utilisation de C++ pour effectuer des opérations binaires sur des chaînes

  • Imprimez toutes les chaînes suivantes possibles en utilisant C++

  • Méthode 5 pour convertir une chaîne en abcd….z comme sous-séquence en utilisant C++

Convertir une chaîne en utilisant C++

Dans ce code C++, nous créons une nouvelle chaîne et supprimons toutes les voyelles de la chaîne d'entrée. # est ajouté à la place de ces voyelles.

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

Sortie

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

Utilisez C++ pour effectuer des opérations unaires sur des chaînes

Dans ce code particulier, nous montrons comment effectuer des opérations unaires sur le tableau d'entrée. Cette fonction accepte un pointeur vers la position de début et de fin d'une seule entrée. Et opérez au début du tableau de sortie.

La traduction chinoise de

Exemple 2

est :

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

Sortie

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

Utilisez C++ pour effectuer des opérations binaires sur des chaînes

Dans ce code particulier, nous montrons comment effectuer des opérations binaires sur le tableau d'entrée. La fonction transform() ajoute un pointeur entre le point de départ et le premier tableau d'entrée. N'oubliez pas que les opérations binaires opèrent toujours sur deux ensembles de données d'entrée.

La traduction chinoise de

Exemple 3

est :

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

Sortie

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

Imprimez toutes les chaînes suivantes en utilisant C++

Appliquez les concepts de sélection et de non-sélection pour découvrir toutes les sous-séquences d'un tableau spécifique. Au cours de ce processus, certains caractères peuvent être supprimés sans modifier l'ordre des éléments. Ici, la complexité temporelle de ce processus est O(2^n) et la complexité spatiale est O(n).

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

Sortie

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

Convertir une chaîne pour avoir abcd…z comme sous-séquence

Il s'agit d'un processus spécifique pour convertir une chaîne en une forme ayant abcd...z comme sous-séquence.

  • Caractère d'initialisation.

  • Si la longueur est inférieure à 26, renvoyez false.

  • Itérer la boucle de 0 à s.size() - 1.

  • Si le personnage atteint z, sortez de la boucle.

  • Si le caractère actuel est inférieur à s ou égal au caractère.

  • Remplacez l'incrément du personnage actuel par 1.

  • Renvoie false si le caractère est inférieur ou égal à z.

  • Sinon, retourne vrai.

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer