Avatar billede davidfossil Nybegynder
30. januar 2006 - 12:34 Der er 8 kommentarer og
3 løsninger

C: Numerisk værde af char (0 til 9)

Jeg har en char som jeg ved er et tal (0 til 9). Findes der en "pæn" måde at bestemme hvilket tal (få det konverteret til en int)? Indtil videre bruger jeg en løsning hvor jeg blot trækker 48 fra char'ens værdi, men der findes måske en funktion der gør det samme - bare lidt mere lækkert :)
Avatar billede arne_v Ekspert
30. januar 2006 - 14:44 #1
personligt bruger jeg

c-'0'

fordei '0' er nemmere at laese end 48

men jeg kenbder ikken funktioner til chars (der er til strenge)
Avatar billede tjp Mester
30. januar 2006 - 15:10 #2
Man kan selvfølgelig altid pakke arnes metode ind i en funktion a la:

int char2num(char c) { if (c >= '0' && c <= '9') return (int) c - '0'; }

eller hvis man er sikker på en numerisk char:

int char2num(char c) { return (int) c - '0'; }
Avatar billede mollevp Nybegynder
30. januar 2006 - 15:10 #3
Du kan lave noget med atoi()

  char a = '6';

  printf("nummer %d", atoi(&a));
Avatar billede arne_v Ekspert
30. januar 2006 - 15:26 #4
jeg tror ikke at atoi virker godt paa enkelt chars
Avatar billede segmose Nybegynder
30. januar 2006 - 16:01 #5
Det er ikke sikkert at '0'+1 == '1' (selvom jeg ikke har set andet) så derfor:

char
  buf[40];

sprinf(buf,"%c",c);

int
  i = atoi(buf);
Avatar billede arne_v Ekspert
30. januar 2006 - 16:16 #6
jeg tror at de fleste godt kan leve med at deres kode kun virker paa platforme hvor
'0'+1 == '1'

(ASCII, alle DOS/Windows code pages, alle ISO-8859-x, alle Unicode/UTF-x, EBCDIC
har det alle opfyldt)
Avatar billede bertelbrander Novice
30. januar 2006 - 20:39 #7
Hvis man er paranoid:

#include <iostream>
#include <string>

unsigned int Num(char ch)
{
  static const std::string Numbers("0123456789");
  return Numbers.find(ch);
}

int main()
{
  std::cout << "The number of '0' is " << Num('0') << std::endl;
  std::cout << "The number of '9' is " << Num('9') << std::endl;
}

Eller i C:
#include <stdio.h>
#include <string.h>

unsigned int Num(char ch)
{
  static char Numbers[ ]  = "0123456789";
  char *s = strchr(Numbers, ch);

  return s ? s - Numbers : (unsigned int )-1;
}

int main(void)
{
  printf("The number of '0' is %u\n",  Num('0'));
  printf("The number of '9' is %u\n",  Num('9'));
  return 0;
}
Avatar billede davidfossil Nybegynder
03. februar 2006 - 14:15 #8
Det var jo mange bud jeg fik her - tror jeg snupper tjp's variant af arnes -'0' trick. Vil I smide nogle svar? :)
Avatar billede arne_v Ekspert
03. februar 2006 - 22:32 #9
.
Avatar billede bertelbrander Novice
03. februar 2006 - 22:50 #10
Jeg samler ikke på point.
Avatar billede tjp Mester
04. februar 2006 - 00:43 #11
Men det gør jeg! ;-)
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