Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 29.08.2005, 14:41 Titel: switch mit strings |
|
|
also, ich müsste n String switchen:
CPP: | switch(string)
{
case "bla1":
break;
case "blae":
break;
}
|
das klappt aber weder per char array, noch mit std::string. Was nu? Die Idee war ne textdatei so zu lesen:
Code: |
[typ1]
wert1
[typ2]
wert2
|
halt je nach typ soll der der varaibale des types den wert zuweisen. also, so das man die auch weglassen kann wenn man möchte, dafür möchte ich halt n switch in ner forschleife machen und so die datei imemr weiter abarbeiten.
[edit]Mist, jetzt sinds 40.001 Beiträge...[/edit] _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 29.08.2005, 14:51 Titel: |
|
|
ist kacke. Ich möchtge nicht 35 mal untereinander elseif tippen. Dafür ist switch doch da, oder? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
phlip Mini JLI'ler
Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:02 Titel: |
|
|
[Edit] Hatte das falsch verstanden , glaub ich. Naja, vllt hilfs ja doch
Vllt. ein String Array mit den Strings füllen, die du suchen möchtest ,dann mit einer Schleife durchlaufen und jeweils mit if vergleichen (wenns mit if geht, ich weiß nicht obs geht)
CPP: | String Test[35] = { Bla, ... }; /*Keine Ahnungs ob das so geht*/
for(int i = 0; i < 35; i++)
{
if(String == Test[35])
{
//Volltreffer
}
} |
Nicht getestet, weiss nicht obs geht.
Wär mein Ansatz für das Problem
Zuletzt bearbeitet von phlip am 29.08.2005, 15:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:05 Titel: |
|
|
Gibt's da vielleicht einen extra Operator dafür? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:09 Titel: |
|
|
Switch geht definitiv so nicht. Switch ist nur für ganze Zahlen zulässig. |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:17 Titel: |
|
|
Zitat: |
ist kacke. Ich möchtge nicht 35 mal untereinander elseif tippen. Dafür ist switch doch da, oder?
|
Das ist doch wurscht? Ob du nun
CPP: | case "bliblablub":
machedasunddas
break;
|
oder
CPP: | if else(str == "bliblablub")
{
machedasunddas
}
|
schreibst, macht keinen großen Unterschied... _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
knallbunt Mini JLI'ler
Anmeldedatum: 16.08.2005 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:18 Titel: |
|
|
Code: | #include <map>
#include <iostream>
#include <string>
int main() {
std::map <std::string, int> m;
m["bla1"] = 1;
m["bla2"] = 2;
std::string s("bla2");
switch(m[s]) {
case 1:
std::cout << "bla1" << std::endl;
break;
case 2:
std::cout << "bla2" << std::endl;
break;
}
} |
wie wärs damit? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:23 Titel: |
|
|
ne idee, aber zuu umständlich
Ich denke ich nehme doch else if, weilsdie zweit schänste version ist. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:36 Titel: |
|
|
OLiver hat Folgendes geschrieben: | Zitat: |
ist kacke. Ich möchtge nicht 35 mal untereinander elseif tippen. Dafür ist switch doch da, oder?
|
Das ist doch wurscht? Ob du nun
CPP: | case "bliblablub":
machedasunddas
break;
|
oder
CPP: | if else(str == "bliblablub")
{
machedasunddas
}
|
schreibst, macht keinen großen Unterschied... |
Nicht ganz aus:
CPP: | case "a":
do();
case "b":
case "c":
do2()
break;
|
wird nämlich
CPP: | else if(str == "a")
{
do();
do2();
}
else if(str == "a" || str == "b")
{
do2();
}
|
_________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:45 Titel: |
|
|
PeaceKiller hat Folgendes geschrieben: | OLiver hat Folgendes geschrieben: | Zitat: |
ist kacke. Ich möchtge nicht 35 mal untereinander elseif tippen. Dafür ist switch doch da, oder?
|
Das ist doch wurscht? Ob du nun
CPP: | case "bliblablub":
machedasunddas
break;
|
oder
CPP: | if else(str == "bliblablub")
{
machedasunddas
}
|
schreibst, macht keinen großen Unterschied... |
Nicht ganz aus:
CPP: | case "a":
do();
case "b":
case "c":
do2()
break;
|
wird nämlich
CPP: | else if(str == "a")
{
do();
do2();
}
else if(str == "a" || str == "b")
{
do2();
}
|
|
In seinem Post stand aber nichts von solchen "Sonderfällen":
CPP: | switch(string)
{
case "bla1":
break;
case "blae":
break;
}
|
_________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 29.08.2005, 15:55 Titel: |
|
|
Switch geht nur für einzelwerte nicht für zusammengesetzte werte!
Also nur
case 'a'
geht oder
case 1
Aber Strings gehen definitiv nicht! Wenn dann sollte man if/else nehmen oder sowas feines wie die WindowsX nehmen bzw. da mit Metaprogrammierung dran gehen. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.08.2005, 16:24 Titel: |
|
|
Ich habe eine Idee, weiss aber nicht, ob sie Praktikabel ist / funktioniert:
std::string hat doch einen Vergleichsoperator (operator==) definiert. Wird dieser (intern) nicht von Switch verwendet? _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 29.08.2005, 16:52 Titel: |
|
|
OLiver hat Folgendes geschrieben: | Zitat: |
ist kacke. Ich möchtge nicht 35 mal untereinander elseif tippen. Dafür ist switch doch da, oder?
|
Das ist doch wurscht? Ob du nun
CPP: | case "bliblablub":
machedasunddas
break;
|
oder
CPP: | if else(str == "bliblablub")
{
machedasunddas
}
|
schreibst, macht keinen großen Unterschied... |
klar, wurscht is das net.
<klugscheißmodus>
Aber abgesehen davon, würden beide Sachen net funzen. 1. kann man(wie Patrick schon gesagt hat) keine strings in switch abfragen. 2. gibts kein
</klugscheißmodus>
Naja, ich würde mir dafür einen eigenen Operator machen, falls keiner vorhanden wäre. Alternatuv dazu kann man aber auch if/else's verwenden, gibt ja copy'n'paste
Gruß DirectXer |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.08.2005, 17:11 Titel: |
|
|
Wenn es sich nur um ein paar Strings handelt, die Fest stehen, kannst du dann nicht auf Defines ausweichen?
Code: | #define STR_START 0x00000001
#define STR_END 0x00000002
#define ... 0x12345678 | Diese kannst du dann ganz leicht per switch abfragen.
Ansonsten: Use c# - dort geht das _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|