13. april 2008 - 21:06
Der er
15 kommentarer og 1 løsning
Switch og arrays
Jeg har to arrays med bestående af hhv tallene 0..9 og bogstavene a..z. Samtidig indtaster jeg et vilkårligt tegn - altså et tegn mellem a..z og 0..9. Jeg vil gerne afgøre, om tegnet er i arrayet a..z eller 0..9. Jeg tænkte på at bruge switch - men er der mulighed for at skrive noget i stil med: case ARRAY_1: ... .. . ? Jeg ved, at et alternativ er at lave en for-løkke - men hvis jeg skal lave det efter ovenstående metode, er jeg lidt på bar bund. Håber I kan hjælpe. Mvh H.C.
Annonceindlæg fra Cognizant
13. april 2008 - 21:13
#1
switch(c) { case 'a': case 'b': ... case 'z': // bogstav break: case '0': ... case '9': // tal break } eller if(c >= 'a' && c <= 'z') { // bogstav } else if(c >= '0' && c <= '9') { // tal } var 2 muligeheder
13. april 2008 - 21:15
#2
en tredie mulighed var: int bogstav[256] = { 0,0,...,1,1,...,0 }; og så bare: if(bogstav[c]) { NB: husk at bruge unsigned char !
13. april 2008 - 21:16
#3
Hmm ja, ok.. første mulighed var slave-metoden. Men nr. 2 er fin. Som min matematiklærer i folkeskolen altid fortalte mig: 1, 2 - du er go'! Læg gerne et svar :-)
13. april 2008 - 21:19
#4
- men hvis nu jeg har et array bestående af tegnene +,-,*, ...., hvordan ville jeg så gøre det? (Udover slave-metoden)
13. april 2008 - 21:24
#5
De er ikke fortløbenede. Det må være switch eller en if med ==||==||== eller array lookup.
13. april 2008 - 21:25
#6
Altså: if(c=='+' || c=='-' || ...)
13. april 2008 - 21:25
#7
og et svar
13. april 2008 - 21:27
#8
- hvordan laver man et array-lookup?
13. april 2008 - 21:33
#9
Array-loopup'et kunne vel være i stil med: for(i=0; i< <ANTAL TEGN I ARRAY>; i++) if(<INDTASTEDE CHAR> == ARRAYNAVN[i]) .. . ?
13. april 2008 - 22:05
#10
med array lookup mener jeg 21:15:56 teknikken
13. april 2008 - 22:35
#11
Hmm, jeg kan ikke helt få array-loopup'et til at fungere: int BOGSTAV[2] = {'a','b'}; unsigned char GAET; cin >> GAET; if(BOGSTAV[gaet]) { cout << "Ja"; } else { cout << "Nej"; }
13. april 2008 - 22:37
#12
arrayet skal være 256 langt hvis du sætter index 97 og 98 til 1 og resten til 0 så vil din if teste for om det er a eller b
13. april 2008 - 22:44
#13
Det vil sige, at jeg skal skrive alle 256 tegn ind? Og hvorfor lige tallet 256?
13. april 2008 - 22:55
#14
Der er 256 forskellige char værdier. Det nemmeste må være: int BOGSTAV[256] = { 0 }; ... BOGSTAV['a'] = 1; BOGSTAV['b'] = 1; ... if(BOSTAV[gaet])
13. april 2008 - 22:57
#15
Hvis du gerne vil have mere end 2 kategorier så lav noget a la: #include <stdio.h> int cat[256] = { 0 }; #define A_OR_B 1 #define X_OR_AST 2 #define OTHER 3 void init() { int i; cat['a'] = A_OR_B; cat['b'] = A_OR_B; cat['x'] = X_OR_AST; cat['*'] = X_OR_AST; } int main() { unsigned char c; init(); c = 'x'; if(cat[c] == A_OR_B) { printf("c er enten 'a' eller 'b'\n"); } else if(cat[c] == X_OR_AST) { printf("c er enten 'x' eller '*'\n"); } else { printf("c er noget andet\n"); } return 0; }
13. april 2008 - 23:05
#16
Fedt nok - det funker. Tak for hjælpen og tålmodigheden.
Kurser inden for grundlæggende programmering