Avatar billede jonas82 Nybegynder
19. november 2003 - 22:21 Der er 6 kommentarer og
2 løsninger

Sikre mig at en string kun indeholder tal

Jeg har en string variabel, jeg skal have tjekket igennem om den indeholder andet end tal. Fx:

string var = "21312asd";
Indeholder bogstaver, så der skal returneres false.

string var = "1234567";
Indeholder kun tal, så der skal returneres true.

Nogen tips til hvordan man mest elegant kan tjekke dette?
Avatar billede arne_v Ekspert
19. november 2003 - 22:34 #1
int onlynum(string s)
{
  for(int i = 0; i < s.length(); i++) if(!isdigit(s[i])) return 0;
  return 1;
}

var en mulighed.
Avatar billede dilleberg Nybegynder
20. november 2003 - 00:23 #2
Klassen 'string' har en metode til det: find_first_not_of

string strTal = "0123456789";
string strTest = "12x45";
int iPos = strTest.find_first_not_of(strTal);
if (iPos >= 0)
  cout << "Strengen indeholder andet end tal" << endl;

db
Avatar billede segmose Nybegynder
20. november 2003 - 09:51 #3
if (strpbrk(testme, "0123456789")) // return first occurence of any digit in testme
  cout << "failed" << endl;
Avatar billede jonas82 Nybegynder
20. november 2003 - 12:50 #4
Tak for svarene. Jeg kan ikke lige se hvad der er bedst, men hvis I alle smider et svar deler jeg pointene.
Tak.
Avatar billede segmose Nybegynder
20. november 2003 - 13:40 #5
Hvis det er en string og ikke en char * skal du formodentlig bruge dillebergs, da de indbyggede metoder ofte er bedre end dem vi selv laver, arne_v's kunne måske blive optimeret til noget der ligner de 2 andre hvor dilleberg bruger C++'s standard og jeg bruger C's standard metoder/functioner.
Avatar billede dilleberg Nybegynder
20. november 2003 - 22:00 #6
strpbrk() == 0 betyder at strengen ikke indeholder tal.

db
Avatar billede arne_v Ekspert
20. november 2003 - 22:49 #7
Jeg tror at segmose tænker på strspn.

if(strspn(testme.c_str(),"0123456789") < testme.length())
Avatar billede segmose Nybegynder
21. november 2003 - 08:58 #8
Damn jeg har fået vendt spørgsmålet i mit hoved øv.
Jeg tænkte faktisk på strpbrk som returnerer en pointer til den første forekomst i parameter 1 (testme) af et tegn fra parameter 2 ("0123456789").
Men strspn er nok bedre til char *, dog er find_first_not_of det rigtige til string, da man ikke behøver at bruge .c_str() som potentielt en ny allokeret buffer med stengen kopieret over i (=> spild af tid og plads til unødvendig kopiering).
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis