C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problem bei der Konvertierung (string aus 0en und 1en -> Fel

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Lars Horeis
Guest





PostPosted: Sun Apr 04, 2004 7:48 pm    Post subject: Problem bei der Konvertierung (string aus 0en und 1en -> Fel Reply with 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.

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





PostPosted: Sun Apr 04, 2004 11:02 pm    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote



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





PostPosted: Mon Apr 05, 2004 12:56 am    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote



"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





PostPosted: Mon Apr 05, 2004 6:48 am    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote

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





PostPosted: Mon Apr 05, 2004 9:05 am    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote

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





PostPosted: Mon Apr 05, 2004 2:02 pm    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote

"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





PostPosted: Mon Apr 05, 2004 4:02 pm    Post subject: Re: Problem bei der Konvertierung (string aus 0en und 1en -> Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.