BULME-6ABELI / 6ABELI_Mesic_Mirza
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Mesic_Beispiel_64.cpp Source File

Mesic_Beispiel_64.cpp

00001 /*  AUFGABE
00002 Ein übergebener String enthält neben anderen (bedeutungslosen) Zeichen öffnende und schließende Klammern, wobei die Klammern rund(), eckig [] oder geschweift {} sein können.
00003 
00004 In einem Programm/Skript ist zu überprüfen, ob Klammern korrekt gesetzt wurden. Dabei gilt:
00005 - jede sich öffnende Klammer wird von einer Klammer gleicher Art wieder geschlossen
00006 - jede sich schließende Klammer wurde von einer Klammer gleicher Art geöffnet
00007 - ein Klammernpaar darf nicht durch andere Klammernpaare überschnitten werden
00008 
00009 Beispiele:
00010 (([[]])) => true
00011 ([)] => false
00012 ([]]) => false
00013 (())) => false
00014 (() => false
00015 ({[])} => false
00016 
00017 */
00018 
00019 
00020 #include <stdio.h>
00021 #include <iostream>
00022 #include <string>
00023 using namespace std;
00024 
00025 int main ()
00026 {
00027  
00028     string text;
00029  
00030  cout<<"Tippen Sie Ihre Klammern ein ";
00031  cin>>text;
00032  
00033  int runde=0;
00034  int eckige=0;
00035  int geschweifte=0;
00036  
00037  int len;
00038  
00039  len=text.length();
00040 
00041 for(int i=0;i<=len-1;i++)  //die Anzahl von verschiedene Klammern wird gezaehlt.
00042 {
00043     
00044     if(text[i]=='('||text[i]==')')
00045     {
00046         runde++;
00047     }
00048     if(text[i]=='['||text[i]==']')
00049     {
00050         eckige++;
00051     }
00052     if(text[i]=='{'||text[i]=='}')
00053     {
00054         geschweifte++;
00055     }
00056     
00057     
00058 }
00059 
00060 int klammernAnzahl=runde+eckige+geschweifte; // hier wird die Summe aller Klammern berechnet 
00061 
00062 int textmitte=(klammernAnzahl/2)-1;     // der mittlere Klammernindex wird berechnet z.B. ((()))  also 
00063                                 //                                                          ^
00064                                 // da kriegen wir die Nummer 2 d.H Index von diese Klammern 
00065                             
00066 int richtigeZyklen=0;
00067 int falscheZyklen=0;
00068 int n=klammernAnzahl-1;  //da kriegen wir den letzten Index der letzte Klammer
00069 
00070 
00071 if(klammernAnzahl%2==0) // wenn die Klammeranzahl nicht gerade ist,es ist automatisch false und das Programm sprint nach unten
00072 {
00073     
00074     for (int m=0;m<=textmitte;m++) 
00075     {
00076     
00077         if( (text[m]=='(' && text[n]==')' ) || (text[m]=='[' && text[n]==']' ) ||(text[m]=='{' && text[n]=='}' ) ) 
00078         {
00079             richtigeZyklen++;         // oben wird gepruft,ob alle verschiedene Klammern passend zugemacht sind.
00080         }
00081         else 
00082             {
00083                 falscheZyklen++;  //sonst wird da ein false generiert
00084              }
00085             
00086             n=n-1;  // von dem letzten Index kommen wir zu nachsten kleineren Index 
00087         
00088     }
00089     
00090 
00091     
00092   if (falscheZyklen!=0 && richtigeZyklen!=0) // wenn ein False in for Schlife generiert wurde, da wird er ein False ausgegeben
00093     {
00094           cout<<text<<"=> false";  
00095     }
00096    
00097     else if (falscheZyklen==0 && richtigeZyklen!=0)// wenn kein False in for Schleife vorkommt, dann ist alles richtig
00098     {
00099           cout<<text<<"=> true";  
00100     }
00101 
00102 }
00103 
00104 else  
00105 {
00106   cout<<text<<"=> false";  
00107 }
00108 
00109 
00110  
00111  
00112  
00113 
00114  
00115   return 0;
00116 }
00117 
00118 
00119 
00120