Frage über string::find()

pepsi_gx

Erfahrenes Mitglied
Hallo,

zum Ausprobieren habe ich folgendes Programm geschrieben:
C++:
     string str1( "Alpha Beta Gamma Delta" );
     string::size_type loc = str1.find( "Omega", 0 );
     if( loc != string::npos ) {
       cout << "Found Omega at " << loc << endl;
     } else {
       cout << "Didn't find Omega" << endl;
     }

Nach meinem Wunsch soll die Funktion beim Nichtfinden "Didn't find xxxxx" zurückgeben und enden.

Aber nachdem "Didn't find xxxxx" erscheint, bricht die Funktion das ganze Programm sofort ab und wirft ein Fenster aus:
An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in BaiduTest.exe

Additional information: External component has thrown an exception.

Wie kann ich diese Exception behandeln? Gerne möchte ich haben, entweder findet sie etwas, oder sagt sie mir, ne das finde ich nicht und bringt das Programm ruhig zu Ende, aber auf keinen Fall so ein Schockeffekt.
 
Hi.

Dein Codeschnipsel enhält keine Stelle die eine Ausnahme werfen kann (außer du hättest Ausnahmen bei den Streams aktiviert). Außerdem hast du ja schon geschrieben, das es erst danach auftrittt.

Gruß
 
gut, wie soll ich die Funktion dann richtig ändern bzw. wie aktiviere ich die Ausnahmen bei den Streams?
Such die Stelle wo die Exception auftritt und berichtige den Fehler oder fange die Ausnahme dort ab wo sie auftritt falls das sinnvoller ist und es sich tatsächlich um einen außergewöhnlichen Fehler handelt.

Gruß

PS: Du kannst Beiträge auch bearbeiten wenn du dich vertippt hast.
 
Such die Stelle wo die Exception auftritt und berichtige den Fehler oder fange die Ausnahme dort ab wo sie auftritt falls das sinnvoller ist und es sich tatsächlich um einen außergewöhnlichen Fehler handelt.

Danke. Nach deinem Hinweis habe ich es so geändert:
C++:
    string str1( "Alpha Beta Gamma Delta" );
    try
{    
    string::size_type loc = str1.find( "Omega", 0 );
    if( loc != string::npos ) 
    {
        cout << "Found Omega at " << loc << endl;
    }
    else
    {
        cout << "Didn't find Omega" << endl;     
    }
}
    catch(Exception Ex)
{
    cout << Ex->Message() << endl;
}
so was meinst du, oder?
 
Zuletzt bearbeitet:
Danke. Nach deinem Hinweis habe ich es so geändert:

so was meinst du, oder?
Ich meine vor allen Dingen, dass du nachdenken solltest wo und warum diese Ausnahme ausgelöst wird.

Wie bereits gesagt gibt es in dem Code den du gepostet hast keine Stelle die eine Ausnahme auslösen würde, so dass es auch relativ unsinnig ist dort eine try .. catch Anweisung zu verwenden.

Außerdem signalisiert eine Ausnahme ein unerwartetes Ereignis, d.h. wenn dort eine Ausnahme ausgelöst wird, dann doch aus einem bestimmten Grund: du hast sicherlich etwas falsch gemacht. Auch in diesem Fall ist es nicht sinnvoll einfach die Ausnahme zu ignorieren.

Gruß
 
Wie bereits gesagt gibt es in dem Code den du gepostet hast keine Stelle die eine Ausnahme auslösen würde, so dass es auch relativ unsinnig ist dort eine try .. catch Anweisung zu verwenden.
OK, ich glaube ich verstehe was du meinst. Aber verstehst du vielleicht nicht ganz, was ich meine.
Das Problem ist, jedesmal wenn ich das Programm kompiliere, bricht die Funktion das Program sofort ab und zeigt so ein Schockfenster wie unten an.
Das will ich nicht haben, sondern wie im Code
C++:
else
{
cout << "Didn't find Omega"<< endl;
}
Wenn nicht finden, soll sich das Programm schliessen.
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    14,2 KB · Aufrufe: 26
Zuletzt bearbeitet:
OK, ich glaube ich verstehe was du meinst. Aber verstehst du vielleicht nicht ganz, was ich meine.
Das Problem ist, jedesmal wenn ich das Programm kompiliere, bricht die Funktion das Program sofort ab und zeigt so ein Schockfenster wie unten an.
Das will ich nicht haben, sondern wie im Code
C++:
else
{
cout << "Didn't find Omega"<< endl;
}
Wenn nicht finden, soll sich das Programm schliessen.
Dann finde und beseitige den Fehler in deinem Programm. Falls du das nicht allein hinbekommst, dann zeig deinen Code so dass evlt. jemand anders helfen kann.

Gruß
 
Dann finde und beseitige den Fehler in deinem Programm. Falls du das nicht allein hinbekommst, dann zeig deinen Code so dass evlt. jemand anders helfen kann.
Aber die Funktion ist richtig geschrieben, oder?
NUR wenn sie "Omega" findet, geht alles super.(vorausgesetzt, "Omega" findet sich im zu suchenden String)
wenn sie "Omega" nicht findet, soll sie einfach die else Klausel ausführen und bringt alles zu Ende.
In der Anlange meines letzten Posts kannst du dieses "Warnungsfenster" schauen, das natürlich nicht von mir kommt und ich will das auch nicht angezeigt bekommen.
 
Zurück