Avatar billede jeppebecool Nybegynder
29. november 2001 - 12:07 Der er 11 kommentarer og
1 løsning

Hvad svarer et \"Set\" i delphi til i c++

I delphi findes der det lynhurtige set , så man foreksempel kan spørge:

var c : char;

if c in [\'A\'..\'Z\',\'a\'..\'z\'] then something

Hvordan ville man gøre det i c++, og/eller java for den sags skyld?
Avatar billede borrisholt Novice
29. november 2001 - 12:10 #1
det kommen an på hvilken C++ du bruger ?

Jens B
Avatar billede jpk Nybegynder
29. november 2001 - 12:11 #2
char ch = \'c\';

if((ch >= \'A\' && ch <= \'Z\') || (ch >= \'a\' && ch <= \'z\'))
{
  // do your stuff...
}

Avatar billede jeppebecool Nybegynder
29. november 2001 - 12:13 #3
Jeg bruger Borland c++ builder 5.
Og så sidder jeg med Visual Age til java, alternativt Java Builder 4 foundation
Avatar billede borrisholt Novice
29. november 2001 - 12:15 #4
C++ Builder har et Set begrb præcis magen til Delphi (dog ikke i syntaxen) slå SET op i hjælpen :-)

Jens B
Avatar billede jeppebecool Nybegynder
29. november 2001 - 12:16 #5
Ovenstående er godt nok , men hvis der er mange forskellige karakterer så bliver det en lille smule besværligt.
Jeg kunne også lave et konstant array med de mulige karakterer og løbe det igennem, men jeg tænkte på om der var en bedre mulighed med nogle bit-operationer måske.
Avatar billede jeppebecool Nybegynder
29. november 2001 - 12:25 #6
OK Jens B , jeg fandt noget der ligner i hvertfald. Settet skal desværre initializeres ret besværligt:

Set <char, minval, maxval> : s;

s << \'A\' << \'B\' << \'C\' << \'D\' . osv. øv
Avatar billede soepro Nybegynder
29. november 2001 - 12:50 #7
De \"set\" variant du skriver ovenfor fra Pascal findes IKKE i C, sådan som du også selv har opdaget.

Du kan dog lave noget der ligner, dog skal du angive alle gyldige tegn direkte:

int inset(char *s, char c)
{
  for (int i=0; s[i] != \'\\x\';i++)
    if (s[i] == c)
      return i+1;
  return 0;
}
if (inset(\"abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\", ch) > 0)
{
  // ch var et af d.o. tegn
}
Avatar billede jeppebecool Nybegynder
29. november 2001 - 13:01 #8
Jeg tror jeg bruger en kombination

initializerer set ved hjælp af ovenstående metode, og så anvender set.contains metoden. Proceduren skal løbe hvert bogstav igennem for en hel bog, så det er vigtigt at min algoritme er tidseffektiv. Den ovenstående procedure er jo ikke specielt tideffektiv.

Tak for hjælpen alle sammen
Avatar billede soepro Nybegynder
29. november 2001 - 13:26 #9
set.contains laver -nødvendigvis- nøjagtig det samme som inset() - men du kan sikkert opnå nogen bedre performance ved at anvende f.eks. strpos eller lign. til at finde ud af om \'ch\' er i settet.
Avatar billede borrisholt Novice
29. november 2001 - 13:42 #10
soepro >> Der findes i C++ Builder et set begreb præcis magen til det du finder i Delphi. Det er implm. som en template. Den template kan i øvrigt nemt modificeres således den kan compilere i VC++

Jens B
Avatar billede jeppebecool Nybegynder
29. november 2001 - 15:32 #11
Hvis det findes , kan jeg ikke finde det :)
Jeg ved ikke hvad en template er ... eller hvordan jeg skal bruge den.
Jeg tror jeg på et tidspunkt fandt noget, som var konverteret direkte fra delphi , men som jeg ikke kunne finde ud af at bruge.

Imidlertid har jeg fundet ud af at det set jeg ville bruge ikke vil tage imod æøå, selv om jeg har erklæret det som
set <AnsiChar,0,255> s;
Avatar billede soepro Nybegynder
30. november 2001 - 08:51 #12
Jens B >> Jeg ved godt at set findes i BCB - det anvendes bl.a. til ShiftState in KeyDown/KeyUp event handlerne - men den konstruktion som jeppe anvender i Pascal, er en Pascal-sprog specifik ting (fandtes også i PolyPascal fra 1988) som ikke findes i C.
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