11. december 2003 - 23:40
Der er
12 kommentarer og 1 løsning
Test indput af string!
Hvordan tester jeg om en variabel er korrekt formateret? Variablen skal testes om den ser således ud : ######-#### (# = et tal) altså som et cpr-nummer.
Annonceindlæg fra Lenovo
11. december 2003 - 23:47
#1
isdigit() fra ctype.h i en løkke kunne være en start.
11. december 2003 - 23:48
#2
Prøv noget a la: char s[12]; // indlæs s for(int i=0;i<11;i++) { if(i==6) if(s[i]!='-') cout << fejl << endl; else if(!isdigit(s[i])) cout << fejl << endl; }
11. december 2003 - 23:49
#3
f.ex: int i; char Nr[12]; GetNr(Nr); bool IsOk = true; for(i = 0; i < 6; i++) if(!isdigit(Nr[i])) IsOk = false; if(Nr[6] != '-') IsOk = false; for(i = 7; i < 11; i++) if(!isdigit(Nr[i])) IsOk = false;
12. december 2003 - 00:11
#4
hmm ... jeg har bygget programmet så at den bruger type string og ikke char.
12. december 2003 - 00:12
#5
bool test_cpr(string c) { char s[12]; s = c; for(int i=0;i<11;i++) { if(i==6) if(s[i]!='-') return false; else if(!isdigit(s[i])) return false; } return true; } // FRA MAIN do { cout<< "Indtast cpr-nummer: "; getline(cin, cpr); } while(!(test_cpr(cpr)));
12. december 2003 - 00:13
#6
Jeg tror slet ikke at du behøver s men at du bare kan bruge c[i].
12. december 2003 - 00:14
#7
undskyld for den dårlige copy/paste der.. Er der muligheder for at jeg kan gøre det samme på en string variabel eller skal jeg ombygge mit program så cpr-nummeret bliver typen char all-over?
12. december 2003 - 00:17
#8
Jeg mener at du kan teste på c[i] direkte. bool test_cpr(string c) { for(int i=0;i<11;i++) { if(i==6) if(c[i]!='-') return false; else if(!isdigit(c[i])) return false; } return true; }
12. december 2003 - 00:18
#9
Måske skulle metoden starte med at checke om længden er 11.
12. december 2003 - 00:55
#10
takker arne :D Nu har jeg fået det til at virke :D men hvorfor kan jeg ikke bruge : if(strlen(c) > 11) return 0; til at teste om strengen er længere end den må være? (jeg har included cstring.h) [C++Error] : Could not find a match for 'std::strlen(std::basic_string<char,std::char_traits<char>,std::allocator<char> >)'.
12. december 2003 - 02:20
#11
Brug strlen(c.c_str()) string har ikke en cast operator der konverterer til char* db
12. december 2003 - 07:52
#12
Jeg ville bruge: if(c.length()!=11)
12. december 2003 - 11:48
#13
Tak for hjælpen :)
Kurser inden for grundlæggende programmering