Avatar billede hclarsen Nybegynder
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.
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
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 !
Avatar billede hclarsen Nybegynder
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 :-)
Avatar billede hclarsen Nybegynder
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)
Avatar billede arne_v Ekspert
13. april 2008 - 21:24 #5
De er ikke fortløbenede. Det må være switch eller en if med ==||==||== eller array lookup.
Avatar billede arne_v Ekspert
13. april 2008 - 21:25 #6
Altså:

if(c=='+' || c=='-' || ...)
Avatar billede arne_v Ekspert
13. april 2008 - 21:25 #7
og et svar
Avatar billede hclarsen Nybegynder
13. april 2008 - 21:27 #8
- hvordan laver man et array-lookup?
Avatar billede hclarsen Nybegynder
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])
..
.

?
Avatar billede arne_v Ekspert
13. april 2008 - 22:05 #10
med array lookup mener jeg 21:15:56 teknikken
Avatar billede hclarsen Nybegynder
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";
    }
Avatar billede arne_v Ekspert
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
Avatar billede hclarsen Nybegynder
13. april 2008 - 22:44 #13
Det vil sige, at jeg skal skrive alle 256 tegn ind?

Og hvorfor lige tallet 256?
Avatar billede arne_v Ekspert
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])
Avatar billede arne_v Ekspert
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;
}
Avatar billede hclarsen Nybegynder
13. april 2008 - 23:05 #16
Fedt nok - det funker.

Tak for hjælpen og tålmodigheden.
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