Toon posts:

[C++] tekenreeks als case in een switchinstructie

Pagina: 1
Acties:
  • 45 views sinds 30-01-2008

Verwijderd

Topicstarter
ja, dat is dus mijn probleem,
ik ben dus een script een het maken waarbij je je naam moet ingeven en die vervolgens controleert of je op de blacklist staat van mijn clan
maar ik wou het script zo kort mogelijk maken, dus ik heb de namen in een switchinstructie gedaan zodat ik geen if ... else if ... else if ... ... else ... ... moet doen want dan wordt het toch wel heel lang
maar nu krijg ik dus dit probleem: switch quantity not an integer
hoe kan ik dit zo kort mogelijk oplossen?
want ik heb niet echt zin om die lange if constructies te gebruiken :/
mijn code is nu:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream.h>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
 {
 string cnx = "Aap, vowa doede dien test, ge zijt zllf nen CNX-er!";
 string black = "Jaja, ge zijt zo nen looser di da op dn blacklist sta!";
 string nee = "Ge hebt geluk, ge sta (nog) nie op dn blacklist!"; 
 char naam[20];
 char quit;
 cout << "Welkom op de 'blacklistchecker' van de CNX." << endl;
 cout << endl;
 cout << "Gelieve uw naam in te voeren met _ ipv spaties en zonder hoofdletters." << endl;
 cout << "vb.: nicolaas_van_mira" << endl;
 cout << endl;
 cin >> naam;
 quit = '\0';
 while (quit != 'q')
   {
   switch (naam)
     {
     case 'kris_van_den_bergh':
     case 'yves_goorden':
     case 'glenn_van_loon':
     case 'steven_hectors': cout << cnx << endl;
          break;
     case 'kate_uytterlinde': cout << black << endl;
     case 'jan_harrewijn':
     case 'lander_de_bruyn':
     case 'fraa_cox':
     case 'marleen_hermans':
     case 'kathy_elsen':
     case 'julie_de_ruyter': cout << black << endl;
          break;
     case 'kris_door_de_muur': cout << "owned" << endl;
          break;
     default: cout << nee << endl;
          break;
     }
   cout << endl;
   cout << "Duw q om af te sluiten." << endl;
   cin >> quit;
   }
 return(0);
 }


(het zou kunnen dat er een paar domme dingen inzitten ofzo die beter anders kunnen, maar dat zal dan wel aan mij liggen, want ik ben nog maar een n00b)

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 16-08 19:14

Eelke Spaak

- Vlad -

Om te beginnen een kleine opmerking: moeten je strings niet tussen dubbele aanhalingstekens (") staan i.p.v. tussen enkele (')?

TheStreme - Share anything with anyone


Verwijderd

Topicstarter
ow ja, da's waar ook, maar euhm, dat verandert niets aan het eigenlijke probleem :p

Verwijderd

Het makkelijkste is denk ik de namen in een array te zetten en dan door de array te loopen.

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 16-08 19:14

Eelke Spaak

- Vlad -

edit:
Wat Sjord zei bedoel ik dus :)


Even zitten denken, en dit heb ik bedacht: je kan een hulpfunctie maken die een array van strings (haystack) en een string (needle) als argument neemt en als returnwaarde een boolean die aangeeft of de needle wel of niet in de haystack zit.

Zoiets dus:

C++:
1
2
3
4
5
6
7
8
9
bool erin(string haystack[], int stackLen, string needle)
{
     for (int i = 0; i < stackLen; i++)
     {
          if (haystack[i] == needle)
               return true;
     }
     return false;
}


En dan kan je het zo gebruiken:

C++:
1
2
3
4
5
6
const int arLen = 4;
string cnxMensen[arLen] = {"kris_van_den_bergh","yves_goorden",
     "glenn_van_loon","steven_hectors"};

if (erin(cnxMensen, arLen, naam))
     cout << cnx << endl;

[ Voor 9% gewijzigd door Eelke Spaak op 23-11-2003 19:26 ]

TheStreme - Share anything with anyone


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Je kan geen strings vergelijken in een switch statement, de compiler kan nooit weten hoe dit moet worden vergeleken. Het beste is inderdaad de namen in een array zetten en met strcmp (of stricmp - ben je gelijk van je hoofdletter issue af) vergelijken.

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Paul
  • Registratie: September 2000
  • Laatst online: 19-08 15:39
Kan aan mij liggen, maar wat is er mis met:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  if (naam = 'kris_van_den_bergh') or
     (naam = 'yves_goorden')       or
     (naam = 'glenn_van_loon')
     (naam = 'steven_hectors')     then cout << cnx << endl;
  else
  if (naam = 'kate_uytterlinde')   then cout << black << endl;
  else
  if (naam = 'jan_harrewijn')      or
     (naam = 'lander_de_bruyn')    or
     (naam = 'fraa_cox')           or
     (naam = 'marleen_hermans')    or
     (naam = 'kathy_elsen')        or
     (naam = 'julie_de_ruyter')    then cout << black << endl;
  else
  if (naam = 'kris_door_de_muur')  then cout << "owned" << endl;
  else
    cout << nee << endl;


Even los van de case-probleemstelling: waarom zet je die namen hardcoded in de source? Kun je ze niet beter uit een tekstbestandje oid halen? Nu moet je namelijk iedere keer dat je iemand op je blacklist zet (of eraf haalt) opnieuw compileren?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Weng
  • Registratie: Juni 2001
  • Laatst online: 11-05-2024

Weng

Are y'all ready kids

Aye aye captain


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Je kan alleen switchen op simpele types, zoals ints, floats en enums. Een tekenreeks oftewel string is volgens C/C++ een char*. Je zou dus alleen kunnen switchen op gelijkheid van pointer, wat geen ongelijkheid van string garandeert indien niet gelijk.

Enne, dit is pas 375 keer gevraagd, zie [search=switch string c++]. Slot dus :)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 23 november 2003 @ 19:26:
Je kan alleen switchen op simpele types, zoals ints, floats en enums.
nee, alleen integral types (dus geen floats en doubles) ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.