Array-Vergleich

DeChecka

Erfahrenes Mitglied
Hi!
Ich hab hier ein Problem, an dem ich schon Stunden sitze, aber einfach keine Lösung finde...

Ich habe eine Funktion zum Vergleichen von Arrays geschrieben:

Code:
bool ArrayVergleichen(char *array_gesetzt, char *array_vergleich, char trennzeichen = ' ', char abbruch = '\0')
{
 int zaehl = 0;
 for(int zaehlen = 0; ; ++zaehlen)
 {   
   // Trennzeichen oder Abbruchzeichen, das ungleich ist
   if(array_gesetzt[zaehlen] != array_vergleich[zaehlen])
   {
    if((array_gesetzt[zaehlen] == trennzeichen) || (array_gesetzt[zaehlen] == abbruch))
    {
     for(zaehl = 1; ; ++zaehl)
     {
      if(array_gesetzt[zaehlen - zaehl] == trennzeichen)
       break;
     }
     for(zaehl = zaehl - 1; array_gesetzt[zaehlen - zaehl] != trennzeichen; --zaehl)
      cout << array_gesetzt[zaehlen - zaehl];
     return false;
    }
    
    // Generelle Ungleichheit zweier Zeichen der Arrays
    for(zaehl = 1; ; ++zaehl)
    {
     if(array_gesetzt[zaehlen - zaehl] == trennzeichen)
      break;
    }
    for(zaehl = zaehl - 1; array_gesetzt[zaehlen - zaehl] != trennzeichen; --zaehl);
     cout << array_gesetzt[zaehlen - zaehl];
    return false;
   }
 }
 return true;
}

Zur Funktionsweise: Falls ein Zeichen gefunden wird, das nicht übereinstimmt, soll im gesetzten Array soweit zurückgesprungen werden, bis das Wort beginnt, in dem beim Vergleichsarray der Fehler auftritt. Dann soll bis zum nächsten Wort in array_gesetzt das Wort, in dem beim array_vergleich der Fehler steckt, ausgegeben werden.

Trennzeichen sind standardmäßig ' ', Abbruchszeichen '\0'.
Für meine Zwecke rufe ich die Funktion allerdings mit '\0' für Trennzeichen und '&' für Ende auf...

Das Problem ist jetzt, dass bei ungleichen Arrays statts einem falschen Wort immer nur ein Leerzeichen ausgegeben wird... :confused:

Ich hoffe, ihr könnt mir helfen!

MfG
DeChecka
 
Weil ich die Funktionen gerne auf individuelle Bedürfnisse anpasse...
Und außerdem lerne ich so ziemlich viel dabei! ;)

Weißt du auch nicht, wo bei dieser Funktion der Fehler liegen könnte?

MfG
DeChecka
 
Code:
for(zaehl = 1; ; ++zaehl)
     {
      if(array_gesetzt[zaehlen - zaehl] == trennzeichen)
       break;
     }
     for(zaehl = zaehl - 1; array_gesetzt[zaehlen - zaehl] != trennzeichen; --zaehl)
      cout << array_gesetzt[zaehlen - zaehl];
     return false;
    }
Erstmal solltest du aufpassen, das du nicht zu weit zurückgehst (vor den Anfang des Arrays), also "zaehl <= zaehlen" als Abbruchbedingung in die erste Schleife schreiben. Dann mußt du dir natürlich merken (boolsche Variable) ob du überhaupt ein Trennzeichen gefunden hast oder du nimmst die zweite Schleife in die erste mit rein.

Außerdem mußte dir nochmal überlegen was wäre wenn mehrere Trennzeichen hintereinander stehen und du mußt immer wieder aufpassen, das du nicht hinter das letzte Zeichen des Arrays liest.

Der Fehler warum immer nur ein Zeichen ausgegeben wird steckt hier allerdings im Detail ;)

... und an deinem Editor der offensichtlich nicht in der Lage ist dir den Kode ordnungsgemäß einzurücken (wenn du's schon nicht selber machst). Tip: Mach mal das Semikolon hinter der schließenden Klammer von der letzten for-Schleife weg. :)
 
Hey Merci Merci Merci Merci! :)

Diesen kleinen Fehler hätte ich in 100 Jahren nicht gefunden! :-)

Vielen Dank!

PS: Wieso rücke ich meinen Code nicht richtig ein? ;)

MfG
DeChecka
 
DeChecka hat gesagt.:
PS: Wieso rücke ich meinen Code nicht richtig ein? ;)
Naja, also in diesem Fall ist es wirklich zu verzeihen, du hast ja so eingerückt wie du es dir gedacht hattest. Das erste was ich allerdings mache wenn ich hier einen Quelltext aus dem Forum kopiere ist ihn von meinem Editor nochmal ordentlich einrücken zu lassen und dann sieht man sofort das das "cout << ..." nicht innerhalb der for-Schleife ist sondern eben dahinter.
 
Zurück