Strings prüfen



  • Hallo zusammen,

    ich habe folgendes Problem:

    Habe zwei Strings

    String erlaubt = "1234567890+/()- ";        // Zeichen die erlaubt sind
    String nummer  = "+49(1234)56789-00";       // Beliebige Telefonnummer
    

    nun möchte ich prüfen, ob die Telefonnummer nur aus den erlaubten Zeichen
    besteht oder unerlaubte Zeichen enthält. Sind unerlaubte Zeichen vorhanden
    soll die Routine abgebrochen werden.

    Ich weiß momentan echt nicht, wie ich dies bewerkstelligen soll.

    Bin für jede Hilfe dankbar.

    MfG molto



  • Hi,

    sollte beim ersten nicht erlaubten Zeichen aufhören.(Wie Du wolltest)
    Ansonsten eben nicht return, sondern irgend ne andere Fehlerbehandlung

    AnsiString erlaubt = "1234567890+/()- "; // Zeichen die erlaubt sind
    AnsiString nummer = "+49(1234)56789-00"; // Beliebige Telefonnummer#

    for(int i = 1; i <= nummer.Length(); i++) if(!erlaubt.Pos(nummer[i])) return;

    mfg

    Ron



  • bool erlaubt(AnsiString nummer)
    {   for(int i=1;i<=nummer.Length();i++)
        {   if(((nummer[i]>=47)&&(nummer[i]<=57))||(nummer[i]==40)||(nummer[i]==41)||(nummer[i]==43)||(nummer[i]==45))
            break;
            else
                return false;
        }
        return true;
    }
    

    müsste prinzipiell gehn habs aber net getestet



  • omfg 😮 😮



  • molto schrieb:

    String erlaubt = "1234567890+/()- ";        // Zeichen die erlaubt sind
    String nummer  = "+49(1234)56789-00";       // Beliebige Telefonnummer
    

    Mein Vorschlag dazu, wenn Du überhaupt AnsiString verwenden willst:

    AnsiString erlaubt = "1234567890+/()- ";        // Zeichen die erlaubt sind
    AnsiString nummer  = "+49(1234)56789-00";       // Beliebige Telefonnummer
    bool stringErlaubt = true;
    
    for (int i=1; i<=nummer.Length(); ++i)
    {
      if (erlaubt.AnsiPos(nummer.SubStr(i, 1)) == 0)
      {
        stringErlaubt = false;
        break;
      }
    }
    

    Das hat den Vorteil, daß es auch funktioniert, wenn sich der erlaubt-String
    ändert.

    Gruß,

    Alexander



  • Super !!!

    Vielen Dank an alle es hat funktioniert 🙂



  • Alexander Kempf schrieb:

    molto schrieb:

    [code]

    AnsiString erlaubt = "1234567890+/()- ";        // Zeichen die erlaubt sind
    AnsiString nummer  = "+49(1234)56789-00";       // Beliebige Telefonnummer
    bool stringErlaubt = true;
    
    for (int i=1; i<=nummer.Length(); ++i)
    {
      if (erlaubt.AnsiPos(nummer.SubStr(i, 1)) == 0)
      {
        stringErlaubt = false;
        break;
      }
    }
    

    schöneres bsp:

    #include <vcl>
    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    bool erlaubt(AnsiString nummer,std::string Pattern)
    {
    int b = 0;
    bool stringErlaubt = true;
    for (int i=1; i<=nummer.Length();i++)
    {    for(int u=0;u<Pattern.length();u++)
         {   if(nummer[i]==Pattern[u])
                b++;
             break;
         }
         if(!b)
            stringErlaubt = false;
    }
    
      return stringErlaubt;
    }
    
    int main()
    {
    std::string Pattern = "1234567890+/()- ";        // Zeichen die erlaubt sind
    AnsiString nummer  = "+49(1234)56789-00";       // Beliebige Telefonnummer
    if(erlaubt(nummer,Pattern))
       cout<<"huhu";
    getch();
    }
    

    mfg



  • Zwei kleine Änderungen, die mir notwendig erscheinen...

    bool erlaubt(AnsiString nummer,std::string Pattern)
    {
    int b = 0; // wie wär's statt dessen mit bool?...
    bool stringErlaubt = true; // ...oder einfach diese Variable verwenden?
    for (int i=1; i<=nummer.Length();i++)
    {    
         b = 0; // oder?
         for(int u=0;u<Pattern.length();u++)
         {   if(nummer[i]==Pattern[u])
                b++;
             break;
         }
         if(!b)
         {
            stringErlaubt = false;
            break; // ...und raus, der Rest interessiert nicht mehr.
         }
    }
    
      return stringErlaubt;
    }
    

    ...oder?

    Gruß,

    Alexander



  • das break auf jedenfall da haste recht.

    aber das andre kannste nicht auf bool umstellen.



  • 1ntrud0r schrieb:

    aber das andre kannste nicht auf bool umstellen.

    Warum nicht? Bitte erklär mir das mal. Ich dachte, Du zählst da nur hoch,
    wenn eine Übereinstimmung gefunden wurde. Wenn Du dann auf !b abprüfst, hast
    Du die Informationen (nämlich welchen Wert b hat) doch ohnehin nicht ausge-
    nutzt. Oder sehe ich da irgendwas komplett falsch?

    Gruß,

    Alexander



  • obwohl eigentlich schon ...


Anmelden zum Antworten