Avatar billede bootlab Nybegynder
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.
Avatar billede bertelbrander Novice
11. december 2003 - 23:47 #1
isdigit() fra ctype.h i en løkke kunne være en start.
Avatar billede arne_v Ekspert
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;
}
Avatar billede bertelbrander Novice
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;
Avatar billede bootlab Nybegynder
12. december 2003 - 00:11 #4
hmm ... jeg har bygget programmet så at den bruger type string og ikke char.
Avatar billede bootlab Nybegynder
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)));
Avatar billede arne_v Ekspert
12. december 2003 - 00:13 #6
Jeg tror slet ikke at du behøver s men at du bare kan bruge c[i].
Avatar billede bootlab Nybegynder
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?
Avatar billede arne_v Ekspert
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;
}
Avatar billede arne_v Ekspert
12. december 2003 - 00:18 #9
Måske skulle metoden starte med at checke om længden er 11.
Avatar billede bootlab Nybegynder
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> >)'.
Avatar billede dilleberg Nybegynder
12. december 2003 - 02:20 #11
Brug strlen(c.c_str())
string har ikke en cast operator der konverterer til char*

db
Avatar billede arne_v Ekspert
12. december 2003 - 07:52 #12
Jeg ville bruge:

if(c.length()!=11)
Avatar billede bootlab Nybegynder
12. december 2003 - 11:48 #13
Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester