 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Lars Horeis Guest
|
Posted: Sun Apr 04, 2004 7:48 pm Post subject: Problem bei der Konvertierung (string aus 0en und 1en -> Fel |
|
|
Hallo!
Ich stehe gerade ein wenig auf dem Schlauch und hoffe, dass mir jemand
helfen kann.
Ich übergebe einem Programm auf der Kommandozeile eine Folge
von 0en und 1en als argv[2].
z.B:
foo parameter1 101010111
Wobei parameter1 vom Typ int ist.
Den String aus 0en und 1en möchte ich nun innerhalb des Programms in
einem Feld speichern, dessen Elemente vom Typ bool sind, also
bool boolArray[9], wobei die 16 hier nur exemplarisch sein soll.
Ich möchte erreichen, dass nachher gilt:
boolArray[0]=1
boolArray[1]=0
boolArray[2]=1
boolArray[3]=0
boolArray[4]=1
boolArray[5]=0
boolArray[6]=1
boolArray[7]=1
boolArray[8]=1
Hat jemand einen Tipp, wie das geht? Mein erster Ansatz war sowas wie
string bar = argv[2];
[...]
boolArray[i] = bar[i];
Das liefert allerdings nicht das gewünschte Ergebnis.
Danke,
Lars
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Sun Apr 04, 2004 11:02 pm Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
Lars Horeis wrote:
| Quote: | Hallo!
Ich stehe gerade ein wenig auf dem Schlauch und hoffe, dass mir jemand
helfen kann.
Ich übergebe einem Programm auf der Kommandozeile eine Folge
von 0en und 1en als argv[2].
z.B:
foo parameter1 101010111
Wobei parameter1 vom Typ int ist.
|
Die Kommandozeilenparameter sind immer strings. Du mußt die dann passend
interpretieren.
| Quote: | Den String aus 0en und 1en möchte ich nun innerhalb des Programms in
einem Feld speichern, dessen Elemente vom Typ bool sind, also
bool boolArray[9], wobei die 16 hier nur exemplarisch sein soll.
|
Welche 16?
| Quote: | Ich möchte erreichen, dass nachher gilt:
boolArray[0]=1
boolArray[1]=0
boolArray[2]=1
boolArray[3]=0
boolArray[4]=1
boolArray[5]=0
boolArray[6]=1
boolArray[7]=1
boolArray[8]=1
Hat jemand einen Tipp, wie das geht? Mein erster Ansatz war sowas wie
string bar = argv[2];
[...]
boolArray[i] = bar[i];
Das liefert allerdings nicht das gewünschte Ergebnis.
|
Damit konvertierst du den Zeichencode des Zeichens in einen bool, nicht
eine Ziffer, die dieser Zeichencode representiert. Du könntest es mit:
boolArray[i] = bar[i] - '0';
versuchen, sofern du vorher sichergestellt hast, daß wirklich nur einsen
und nullen drin stehen. Alternativ kannst du satt dem boolArray auch
gleich ein std::bitset verwenden.
std::bitset<9> myBitset(bar);
Das Inidizeren funktioniert wie beim Array aus bool auch.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Mon Apr 05, 2004 12:56 am Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
"Rolf Magnus" <ramagnus (AT) t-online (DOT) de> schrieb:
| Quote: | Lars Horeis wrote:
Ich übergebe einem Programm auf der Kommandozeile eine Folge
von 0en und 1en als argv[2].
Den String aus 0en und 1en möchte ich nun innerhalb des Programms in
einem Feld speichern, dessen Elemente vom Typ bool sind, also
boolArray[i] = bar[i] - '0';
|
Es sei noch erwähnt, daß man hier korrekterweise das Locale der
Laufzeitumgebung beachten sollte; also
#include <locale>
#include <stdexcept>
namespace UserChar
{
std::ctype< char > const& facCt
= std::use_facet< std::ctype< char > >( std::locale("") );
char const zero = facCt.widen( '0' );
char const unity = facCt.widen( '1' );
bool ToBool( char c ) {
if( c == zero ) return false;
else if( c == unity ) return true;
else throw std::runtime_error( "blah ... bad input" );
}
)
...
boolArray[i] = UserChar::ToBool( bar[i] );
oder so.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Lars Horeis Guest
|
Posted: Mon Apr 05, 2004 6:48 am Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
On Mon, 05 Apr 2004 01:02:07 +0200
Rolf Magnus <ramagnus (AT) t-online (DOT) de> wrote:
Hallo Rolf!
[...]
| Quote: |
foo parameter1 101010111
Wobei parameter1 vom Typ int ist.
Die Kommandozeilenparameter sind immer strings. Du mußt die dann
passend interpretieren.
|
Stimmt, habe mich nur falsch ausgedrückt. Auf der Kommandozeile ist es
ein string im Programm selbst wandle ich den string mit atoi um.
| Quote: | Den String aus 0en und 1en möchte ich nun innerhalb des Programms in
einem Feld speichern, dessen Elemente vom Typ bool sind, also
bool boolArray[9], wobei die 16 hier nur exemplarisch sein soll.
Welche 16?
|
Wieder mein Fehler. Da wo boolArray[9] steht, stand zuvor boolArray[16],
habe vergessen das zu ändern.
[...]
| Quote: | Hat jemand einen Tipp, wie das geht? Mein erster Ansatz war sowas
wie
string bar = argv[2];
[...]
boolArray[i] = bar[i];
Das liefert allerdings nicht das gewünschte Ergebnis.
Damit konvertierst du den Zeichencode des Zeichens in einen bool,
nicht eine Ziffer, die dieser Zeichencode representiert. Du könntest
es mit:
|
Sowas hatte ich befürchtet, mir war nur nicht klar, wie man das umgehen
kann.
| Quote: | boolArray[i] = bar[i] - '0';
|
Das werde ich mal testen. Danke.
| Quote: | versuchen, sofern du vorher sichergestellt hast, daß wirklich nur
einsen und nullen drin stehen. Alternativ kannst du satt dem boolArray
auch gleich ein std::bitset verwenden.
std::bitset<9> myBitset(bar);
Das Inidizeren funktioniert wie beim Array aus bool auch.
|
std::bitset kannte ich noch nicht, werde ich mir auch mal anschauen und
gucken, ob es mit dem bestehenden Programm ohne Probleme zusammenläuft.
Gruss,
Lars
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Apr 05, 2004 9:05 am Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
Markus Schaaf wrote:
| Quote: | Es sei noch erwähnt, daß man hier korrekterweise das Locale der
Laufzeitumgebung beachten sollte;
|
Warum? Was könnte schiefgehen, wenn nicht?
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Mon Apr 05, 2004 2:02 pm Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
"Rolf Magnus" <ramagnus (AT) t-online (DOT) de> schrieb:
| Quote: | Warum? Was könnte schiefgehen, wenn nicht?
|
Der Codepunkt für '0' in des Users Locale-Zeichensatz muß nicht
mit der '0' beim Übersetzen übereinstimmen, die Du abziehst. Der
einfache Code würde dann stillscheigend immer »true« konvertieren.
Wir sind nur verwöhnt, weil bei den heute (in Mitteleuropa) häufig
verwendeten Zeichensätzen die (unteren) Codepunkte mit denen des
ASCII (und damit auch untereinander) übereinstimmen.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Apr 05, 2004 4:02 pm Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> |
|
|
Lars Horeis wrote:
| Quote: | On Mon, 05 Apr 2004 01:02:07 +0200
Rolf Magnus <ramagnus (AT) t-online (DOT) de> wrote:
Hallo Rolf!
[...]
foo parameter1 101010111
Wobei parameter1 vom Typ int ist.
Die Kommandozeilenparameter sind immer strings. Du mußt die dann
passend interpretieren.
Stimmt, habe mich nur falsch ausgedrückt. Auf der Kommandozeile ist es
ein string im Programm selbst wandle ich den string mit atoi um.
|
Ich wollte nur sicherstellen, daß du das weißt. Ich hab auch schon Leute
erlebt, die da versucht haben, direkt einen Integer zu lesen statt
Strings.
Weiterhin würde ich dir empfehlen, statt atoi entweder strtol oder einen
stringstream einzusetzen. atoi bietet dir nämlich keine Möglichkeit, zu
erkennen, ob die Konvertierung erfolgreich war.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|