Table des matières
Exemple
Sortie
Conclusion
Maison développement back-end C++ Supprimez les crochets de la chaîne algébrique contenant les opérateurs + et - en utilisant C++

Supprimez les crochets de la chaîne algébrique contenant les opérateurs + et - en utilisant C++

Sep 09, 2023 am 10:57 AM
c语言 retrait du support chaîne algébrique

Supprimez les crochets de la chaîne algébrique contenant les opérateurs + et - en utilisant C++

Étant donné une chaîne algébrique comme p-(q-r)-s, nous devons supprimer les crochets et convertir la chaîne en une chaîne avec le même résultat mathématique. Par conséquent, la chaîne p-(q-r)-s est convertie en p-q+r-s, donnant le même résultat mathématique. Pour y parvenir, nous pouvons utiliser la pile et savoir si le symbole à venir dans l'expression entre crochets doit être inversé.

  • 0 signifie + ou pas de flip

  • 1 signifie - ou retournez

Donc à chaque ouverture de parenthèse nous pousserons 0 ou 1 selon que le signe dans la parenthèse est retourné ou non. Lorsque nous voyons le crochet fermant, nous faisons éclater la pile.

Remarque - Nous ne considérons pas les chaînes commençant par des parenthèses. Il faut nettoyer ce type de chaîne. Par exemple, s="(p-(q+r))" doit être s="p-(q+r)". Dans ce cas, nous pouvons facilement exécuter une boucle de l'index 1 à la longueur -2 puis de 0 à la longueur -1.

Regardons quelques scénarios d'entrée

En supposant que l'entrée de la méthode est un certain nombre de types de données chaîne, dans la liste des résultats, nous obtenons l'expression sauf les crochets -

Input: (2×3)─(6─(4+5))
Result: 2×3–6+4+5
Copier après la connexion

Supposons que la saisie de la méthode commence par des parenthèses, dans la liste des résultats, nous obtenons une expression sans parenthèses comme suit -

Input: (a+(b-c-d)-e)
Result: a-b+c+d+e
Copier après la connexion

Remarque - Nous ne prenons pas en compte les chaînes commençant par des parenthèses dans le programme. Il faut nettoyer ce type de chaîne. Par exemple, s="(a+(b-c-d)-e)" doit être s="a+(b-c-d)-e". Dans ce cas, nous pouvons facilement exécuter une boucle de l'index 1 à la longueur -2 puis de 0 à la longueur -1.

Ici, nous pouvons utiliser une expression polynomiale incluant des parenthèses comme entrée, donc dans la liste résultante, nous obtenons une expression comme celle-ci -

Input: (p*p)-(p-q)
Result: p*p-p+q
Copier après la connexion

Nous avons appliqué cela aux polynômes quadratiques, mais la méthode peut également être utilisée pour des expressions polynomiales d'ordre supérieur.

Exemple

Supposons que nous ayons trois chaînes S1, S2 et S3 avec les valeurs suivantes -

string s1 = "p-(-q+(-r+(s-t)))";
string s2 = "(p+q-r+t+u)";
string s3 = "(p+ (q-r-t)-u)";
Copier après la connexion

Utilisons donc la méthode C++ pour supprimer les crochets de la chaîne ci-dessus contenant les opérateurs + et -. Voici un programme C++ pour le problème donné -

#include <iostream>
#include <stack>
using namespace std;
string solve(string s) {
   stack<int> sk;
   sk.push(0);
   string res = "";
   for(int i=0;i<s.size();i++) {
      if(s[i] == '(') {
         int temp = s[i-1] == '+' ? 0 : 1;
         if(sk.top() == 0) sk.push(temp);
         else sk.push(temp^1);
      } else if(s[i] == ')') {
         sk.pop();
      } else if(s[i] == '+' || s[i] == '-') {
         char op;
         if(sk.top() == 0) op = s[i];
         else op = (s[i]=='+' ? '-' : '+');
         if(res.size() != 0 && (res[res.size()-1]=='+' || res[res.size()- 1]=='-')) res[res.size()-1] = op;
         else res+=op;
      } else {
         res+=s[i];
      }
   }
   return res;
}
int main() {
   string s1 = "p-(-q+(-r+(s-t)))";
   string s2 = "(p+q-r+t+u)";
   string s3 = "(p+ (q-r-t)-u)";
   cout << solve(s1) << endl;
   cout << solve(s2) << endl;
   cout << solve(s3) << endl;
   return 0;
}
Copier après la connexion

Sortie

p+q+r-s+t
p-q+r-t-u
p- q-r-t+u
Copier après la connexion

Conclusion

Nous utilisons une simple pile pour garder une trace des drapeaux pour chaque ouverture de support. Ensuite, à l’aide de symboles, on transforme les valeurs une à une. La clé est de comprendre comment suivre les changements de symboles avec des parenthèses, et le problème devient alors plus facile.

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Dead Rails - Comment apprivoiser les loups
4 Il y a quelques semaines By DDD
Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
2 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1657
14
Tutoriel PHP
1257
29
Tutoriel C#
1231
24
C Structure des données du langage: représentation des données et fonctionnement des arbres et des graphiques C Structure des données du langage: représentation des données et fonctionnement des arbres et des graphiques Apr 04, 2025 am 11:18 AM

C Structure des données du langage: La représentation des données de l'arborescence et du graphique est une structure de données hiérarchique composée de nœuds. Chaque nœud contient un élément de données et un pointeur vers ses nœuds enfants. L'arbre binaire est un type spécial d'arbre. Chaque nœud a au plus deux nœuds enfants. Les données représentent StrustReenode {intdata; structTreenode * gauche; structureReode * droite;}; L'opération crée une arborescence d'arborescence arborescence (prédécision, ordre dans l'ordre et ordre ultérieur) Le nœud d'insertion de l'arborescence des arbres de recherche de nœud Graph est une collection de structures de données, où les éléments sont des sommets, et ils peuvent être connectés ensemble via des bords avec des données droites ou peu nombreuses représentant des voisins.

La vérité derrière le problème de fonctionnement du fichier de langue C La vérité derrière le problème de fonctionnement du fichier de langue C Apr 04, 2025 am 11:24 AM

La vérité sur les problèmes de fonctionnement des fichiers: l'ouverture des fichiers a échoué: les autorisations insuffisantes, les mauvais chemins de mauvais et les fichiers occupés. L'écriture de données a échoué: le tampon est plein, le fichier n'est pas écrivatif et l'espace disque est insuffisant. Autres FAQ: traversée de fichiers lents, encodage de fichiers texte incorrect et erreurs de lecture de fichiers binaires.

CS-semaine 3 CS-semaine 3 Apr 04, 2025 am 06:06 AM

Les algorithmes sont l'ensemble des instructions pour résoudre les problèmes, et leur vitesse d'exécution et leur utilisation de la mémoire varient. En programmation, de nombreux algorithmes sont basés sur la recherche et le tri de données. Cet article présentera plusieurs algorithmes de récupération et de tri de données. La recherche linéaire suppose qu'il existe un tableau [20,500,10,5,100,1,50] et doit trouver le numéro 50. L'algorithme de recherche linéaire vérifie chaque élément du tableau un par un jusqu'à ce que la valeur cible soit trouvée ou que le tableau complet soit traversé. L'organigramme de l'algorithme est le suivant: Le pseudo-code pour la recherche linéaire est le suivant: Vérifiez chaque élément: Si la valeur cible est trouvée: return True return false C Implementation: # include # includeIntMain (void) {i

Comment Debian Readdir s'intègre à d'autres outils Comment Debian Readdir s'intègre à d'autres outils Apr 13, 2025 am 09:42 AM

La fonction ReadDir dans le système Debian est un appel système utilisé pour lire le contenu des répertoires et est souvent utilisé dans la programmation C. Cet article expliquera comment intégrer ReadDir avec d'autres outils pour améliorer sa fonctionnalité. Méthode 1: combinant d'abord le programme de langue C et le pipeline, écrivez un programme C pour appeler la fonction readdir et sortir le résultat: # include # include # include # includeIntmain (intargc, char * argv []) {dir * dir; structDirent * entrée; if (argc! = 2) {

C Programmation multithread du langage: Guide du débutant et dépannage C Programmation multithread du langage: Guide du débutant et dépannage Apr 04, 2025 am 10:15 AM

C Guide de programmation multithreading Language: Création de threads: Utilisez la fonction PTHREAD_CREATE () pour spécifier l'ID de thread, les propriétés et les fonctions de thread. Synchronisation des threads: empêchez la concurrence des données via des mutex, des sémaphores et des variables conditionnelles. Cas pratique: utilisez le multi-lancement pour calculer le numéro Fibonacci, attribuer des tâches à plusieurs threads et synchroniser les résultats. Dépannage: résoudre des problèmes tels que les accidents de programme, les réponses d'arrêt de fil et les goulots d'étranglement des performances.

Comment produire un compte à rebours dans le langage C Comment produire un compte à rebours dans le langage C Apr 04, 2025 am 08:54 AM

Comment produire un compte à rebours en C? Réponse: Utilisez des instructions de boucle. Étapes: 1. Définissez la variable N et stockez le numéro de compte à rebours à la sortie; 2. Utilisez la boucle while pour imprimer en continu n jusqu'à ce que n soit inférieur à 1; 3. Dans le corps de la boucle, imprimez la valeur de n; 4. À la fin de la boucle, soustrayez N par 1 pour sortir le prochain plus petit réciproque.

Comment obtenir le format de la déclaration d'appel de la définition de la fonction de langue C Comment obtenir le format de la déclaration d'appel de la définition de la fonction de langue C Apr 04, 2025 am 06:03 AM

Les fonctions du langage C comprennent des définitions, des appels et des déclarations. La définition de la fonction spécifie le nom de la fonction, les paramètres et le type de retour, le corps de fonction implémente les fonctions; Les appels de fonction exécutent des fonctions et fournissent des paramètres; Les déclarations de fonction informer le compilateur du type de fonction. Value Pass est utilisé pour les paramètres PASS, faites attention au type de retour, maintenez un style de code cohérent et gérez les erreurs dans les fonctions. La maîtrise de ces connaissances peut aider à rédiger un code C élégant et robuste.

Entiers en C: un peu d'histoire Entiers en C: un peu d'histoire Apr 04, 2025 am 06:09 AM

Les entiers sont le type de données le plus élémentaire en programmation et peuvent être considérés comme la pierre angulaire de la programmation. Le travail d'un programmeur est de donner les significations de ces chiffres. Peu importe la complexité du logiciel, cela revient finalement aux opérations entières, car le processeur ne comprend que les entiers. Pour représenter des nombres négatifs, nous avons introduit le complément de deux; Pour représenter des nombres décimaux, nous avons créé une notation scientifique, il y a donc des nombres à virgule flottante. Mais dans l'analyse finale, tout est toujours inséparable à partir de 0 et 1. Un bref historique des entiers en C, int est presque le type par défaut. Bien que le compilateur puisse émettre un avertissement, dans de nombreux cas, vous pouvez toujours écrire du code comme ceci: Main (void) {return0;} d'un point de vue technique, cela équivaut au code suivant: intmain (void) {return0;}

See all articles