float auf gültigkeit prüfen
-
hallo nochmals.
ich habe mir schnell eine funktion geschrieben, die überprüft, ob ein float in string form gültig ist. gerne würde ich eure meinung zur funktion wissen:
//--------------------------------------------------------------------------- bool IsFloat(String input) { if(input.Length() <= 0) return false; else { bool dot_found = false; if(!IsNumericSymbol(input[1]) || !IsNumericSymbol(input[input.Length()])) return false; for(int i = 1; i <= input.Length(); i++) { if(!IsNumericSymbol(input[i]) && input[i] != '.' || input[i] == '.' && dot_found) return false; if(input[i] == '.') dot_found = true; } } return true; }ich möchte damit nur sicherstellen das es die form vorzahlen_punkt_nachkommastellen hat. ist die funktion dafür gut geschrieben?
p.s. die funktion IsNumericSymbol ist hier nicht ersichtlich. sie überprüft aber auch nur ob das zeichen 0-9 ist. danke für eure meinung.
-
forken schrieb:
if(input.Length() <= 0) return false; elseWenn du schon early return machst, dann lass das else und die damit verbundene tiefere Schachtelung weg.
Reguläre Ausdrücke willst du nicht verwenden?
-
tzern schrieb:
Wenn du schon early return machst, dann lass das else und die damit verbundene tiefere Schachtelung weg.
stimmt, dass habe ich jetzt völlig übersehen.
tzern schrieb:
Reguläre Ausdrücke willst du nicht verwenden?
nein. also ich möchte wirklich nur z.B. das format 123.456, 12.45, 1.2 etc. als gültig sehen.
-
mein erster gedanke dazu sieht so aus:
bool IsFloat(String input) { if(input.Length() <= 0) return false; int dot_pos = -1; for(int i = 1; i <= input.Length(); i++) { if(IsNumericSymbol(input[i])) continue;//ziffern sind immer gut if(input[i]=='.') if(dot_pos==-1) dot_pos=i;//der erste punkt else return false;//der zweite punkt } } if(dot_pos<1 || dot_pos>input.Length()-1) return false; return true; }
-
if(input.Length() <= 0) return false;==>
if(input.empty()) return false;Ich glaube nicht, dass die Länge einer guten String-Klasse unter 0 sein kann - und für gleich 0 gibt es nun mal empty ^^
bb
edit:
ich würde einen bool für dot nehmen...
auch würde ich keine eingaben á la ".5" verschmähen ^^bool IsFloat(String input) { if(input.empty()) return false; bool haveDot = false; for(String::SizeType i (0), e(input.Length()); i != e; ++i) { if(IsNumericSymbol(input[i])) continue;//ziffern sind immer gut if((input[i]=='.') || (input[i]==',')) //, und . erlauben { if (haveDot) return false; haveDot = true; } } return true; }diese variante sollte alles zulassen, was in etwa so aussieht:
,23 //0,23 .1 //0,1 . //0 0 //0 12 //12 0.12 //0,12 5,54 //5,54NICHT aber so etwas:
*T*T* //T ist '.' oder ',' - * ist eine beliebige Ziffernfolge (muss aber nicht vorhanden sein)bb