Avatar billede spectual Nybegynder
06. juni 2001 - 00:17 Der er 11 kommentarer og
1 løsning

ASCII til et tal

Jeg ved at man kan oversætte et tal til en \"streng\" via.

_itoa (bc,buffer, 10);

men hvordan gør man det omvendt?

Hvordan tjekkes det at buffer indeholder et gyldigt tal?
Avatar billede henrik_ffc Nybegynder
06. juni 2001 - 01:26 #1
Øøøøhhhh

Hvad med :

include <stdlib.h>
int atoi(const char *s);
Avatar billede spectual Nybegynder
06. juni 2001 - 09:39 #2
Hva\' med om det er gyldigt?
Avatar billede henrik_ffc Nybegynder
06. juni 2001 - 11:24 #3
atoi parser strengen indtil enten strengen er slut eller der stødes på et tegn.
Herefter stoppes. Så resultatet ER en gyldig int.
Hvis strengen fx indeholder \"FEJL\", returneres 0, så du kan checke på denne værdi.

if (atoi(myString)==0) prinft(\"Fejl\");
Avatar billede henrik_ffc Nybegynder
06. juni 2001 - 11:25 #4
...
eller
if (atoi(myString)>0) printf(\"gyldig INT\");
Avatar billede spectual Nybegynder
06. juni 2001 - 11:27 #5
Hvad så hvis tallet er 0?
Avatar billede henrik_ffc Nybegynder
06. juni 2001 - 11:36 #6
Så har du et problem...
atoi returnerer 0 ved fejl.

Du kan eventuelt prøve at sikre dig at din streng ikke kan/må indeholde 0.
Eller du kunne checke strengen explicit for værdien \"0\"

#include <string.h>
#include <stdlib.h>
if (atoi(myString)>0 || strcmp(myString, \"0\")==0) printf(\"gyldig INT\");
else printf(\"fejl\");
Avatar billede spectual Nybegynder
06. juni 2001 - 11:42 #7
Tja...

Den holder vist ikke helt i den der form :=)
Hvis du har en streng der siger \"284a\", så vil den sige gyldigt tal (284), hvilket jo ikke er helt korrekt.

Så løsningen må være: (det er ikke rigtigt c++)

gyldig = false;
tal = atoi (myString);
til_streng = _itoa (tal);
if lengthof (til_streng) == lengthof (myString) then gyldig=true;
if (gyldig) printf (\"gyldigt int\") else prinf (\"ikke gyldigt\")

Kunne du oversætte ovenstående til c++ ?
Avatar billede henrik_ffc Nybegynder
06. juni 2001 - 13:12 #8
Du kunne også checke strengen op imod itoa(atoi(strengen))
Altså oversæt \"284a\" -> 284 -> \"284\"  der er forskellig fra \"284a\" og derfor ikke gyldig.

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
  char myString[80] =\"21a\";
  char myString2[80];
  itoa(atoi(myString), myString2, 10);

  if (strcmp(myString, myString2)==0) printf(\"gyldig INT\");
  else printf(\"fejl\");
 
  return 0;
}

Avatar billede spectual Nybegynder
06. juni 2001 - 13:19 #9
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

bool isnumeric (char* input)
{
  char tmpString[80];
  itoa(atoi(input), tmpString, 10);

  if (strcmp(input, tmpString)==0) return false;
  else return true;
}


.... Er ovenstående korrekt?
Avatar billede henrik_ffc Nybegynder
12. juni 2001 - 00:03 #10
Nej du har byttet om på returværdierne.

bool isnumeric (char* input)
{
  char tmpString[80];
  itoa(atoi(input), tmpString, 10);

  if (strcmp(input, tmpString)==0) return true;
  else return false;
}
Avatar billede henrik_ffc Nybegynder
12. juni 2001 - 00:09 #11
Husk at lukke spørgsmålet, når du har fået svar!
Avatar billede spectual Nybegynder
12. juni 2001 - 10:52 #12
Jeps, henrik_ffc.

Jeg ventede på at du svarede på om det var korrekt.

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