Vererbung_Aufgabe_1

Mesic_Beispiel_64.cpp

Committer:
mirzamesic
Date:
2020-04-28
Revision:
5:0c5eeee1465b
Parent:
3:4177be942543

File content as of revision 5:0c5eeee1465b:

/*  AUFGABE
Ein übergebener String enthält neben anderen (bedeutungslosen) Zeichen öffnende und schließende Klammern, wobei die Klammern rund(), eckig [] oder geschweift {} sein können.

In einem Programm/Skript ist zu überprüfen, ob Klammern korrekt gesetzt wurden. Dabei gilt:
- jede sich öffnende Klammer wird von einer Klammer gleicher Art wieder geschlossen
- jede sich schließende Klammer wurde von einer Klammer gleicher Art geöffnet
- ein Klammernpaar darf nicht durch andere Klammernpaare überschnitten werden

Beispiele:
(([[]])) => true
([)] => false
([]]) => false
(())) => false
(() => false
({[])} => false

*/


#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

int main ()
{
 
    string text;
 
 cout<<"Tippen Sie Ihre Klammern ein ";
 cin>>text;
 
 int runde=0;
 int eckige=0;
 int geschweifte=0;
 
 int len;
 
 len=text.length();

for(int i=0;i<=len-1;i++)  //die Anzahl von verschiedene Klammern wird gezaehlt.
{
    
    if(text[i]=='('||text[i]==')')
    {
        runde++;
    }
    if(text[i]=='['||text[i]==']')
    {
        eckige++;
    }
    if(text[i]=='{'||text[i]=='}')
    {
        geschweifte++;
    }
    
    
}

int klammernAnzahl=runde+eckige+geschweifte; // hier wird die Summe aller Klammern berechnet 

int textmitte=(klammernAnzahl/2)-1;     // der mittlere Klammernindex wird berechnet z.B. ((()))  also 
                                //                                                          ^
                                // da kriegen wir die Nummer 2 d.H Index von diese Klammern 
                            
int richtigeZyklen=0;
int falscheZyklen=0;
int n=klammernAnzahl-1;  //da kriegen wir den letzten Index der letzte Klammer


if(klammernAnzahl%2==0) // wenn die Klammeranzahl nicht gerade ist,es ist automatisch false und das Programm sprint nach unten
{
    
    for (int m=0;m<=textmitte;m++) 
    {
    
        if( (text[m]=='(' && text[n]==')' ) || (text[m]=='[' && text[n]==']' ) ||(text[m]=='{' && text[n]=='}' ) ) 
        {
            richtigeZyklen++;         // oben wird gepruft,ob alle verschiedene Klammern passend zugemacht sind.
        }
        else 
            {
                falscheZyklen++;  //sonst wird da ein false generiert
             }
            
            n=n-1;  // von dem letzten Index kommen wir zu nachsten kleineren Index 
        
    }
    

    
  if (falscheZyklen!=0 && richtigeZyklen!=0) // wenn ein False in for Schlife generiert wurde, da wird er ein False ausgegeben
    {
          cout<<text<<"=> false";  
    }
   
    else if (falscheZyklen==0 && richtigeZyklen!=0)// wenn kein False in for Schleife vorkommt, dann ist alles richtig
    {
          cout<<text<<"=> true";  
    }

}

else  
{
  cout<<text<<"=> false";  
}


 
 
 

 
  return 0;
}