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 FehlerbehandlungAnsiString 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 ...