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 :)
Annonceindlæg fra Kingston Technology
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)
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'; }
30. januar 2006 - 15:10
#3
Du kan lave noget med atoi() char a = '6'; printf("nummer %d", atoi(&a));
30. januar 2006 - 15:26
#4
jeg tror ikke at atoi virker godt paa enkelt chars
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);
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)
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; }
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? :)
03. februar 2006 - 22:32
#9
.
03. februar 2006 - 22:50
#10
Jeg samler ikke på point.
04. februar 2006 - 00:43
#11
Men det gør jeg! ;-)
Kurser inden for grundlæggende programmering