Probleme mit Strings



  • Hallo zusammen,

    ich hab eigentlich ein voll simples Programm gemacht, aber ich kann keine Strings ausgeben. Abslut nicht. Woran liegt das??? 😞

    Jetzt bitte nicht sagen das ich das mit std::string versuchen muss. Das will ich nicht und das soll ich auch nicht.

    #include "stdafx.h"
    #include <conio.h>
    
    #using <mscorlib.dll>
    
    using namespace System;
    using namespace std;
    
    void main()
    {	
    	string a;
    	a="hhhh";
    	cout<<a;
    	getch();
    }
    

    Bedanke mich für eure antworten



  • ich muss mich entschuldigen. Ich war wieder voll blind und hab vergessen <string> zu includen. Sorry !!!



  • Warum willst Du STL verwenden, wenn Du .NET verwendest?????
    Macht gar keinen Sinn, ausser dass Dein Programm langsamer wird.

    Verwende bitte

    System::String
    


  • Ich möchte eine IntegerZahl in einen String umwandeln und benutze dazu die Methode ToString. Die soll eigentlich einen "true" oder "false" zurückgeben.
    Aber irgendwie klappt gar nix.

    Besonders verwirrend: b hat den wert 1 obwohl ich es als boolean definiert habe 😮

    Noch verwirrender: 1 heißt eigentlich "true" aber es geht trotzdem nicht.

    Wo ist mein Fehler?

    #include "stdafx.h"
    #include <conio.h>
    #include <string>
    #include <iostream>
    
    #using <mscorlib.dll>
    
    using namespace System;
    using namespace std;
    
    void main()
    {
        int i=5;
    	bool b;
    
    	b=i.ToString();
        cout<<b;					//liefert 1
    
    	cout<<"\n"<<i+1;			//Liefert 6
    	getch();
    }
    

    P.S.: Ich bin ein totaler Neuling in Visual C++, ich kommm damit eigentlich auch nur schwer zurecht aber ich bin nunmal durch studium gezwungen das zu benutzen.



  • chris090980 schrieb:

    bool b;
      b=i.ToString();
    

    Was soll denn das?

    chris090980 schrieb:

    cout<<b; //liefert 1
    

    Das ist wieder STL... verwende doch

    Console::WriteLine(i.ToString());
    

    chris090980 schrieb:

    P.S.: Ich bin ein totaler Neuling in Visual C++, ich kommm damit eigentlich auch nur schwer zurecht aber ich bin nunmal durch studium gezwungen das zu benutzen.

    Dann lern doch zuerst mal C++, bevor Du C++/CLI (bzw. managed C++) machst!



  • Ich mache "learning by doing".

    und mir ist das scheiß egal ob das schwachsinn ist was ich mache oder nicht, hauptsache es funktioniert, das ist das einigste für mich worauf ich wert lege.

    Außerdem bringt mir dieses Console::WriteLine(i.ToString()); überhaupt nix, weil das void zurückgibt.

    und außerdem muss alles so einfach sein wie möglich.

    Aber ok, wenn man mir hier nicht helfen will, muss ich mir wohl ein anderes Forum suchen, schade eigentlich.



  • chris090980 schrieb:

    Aber ok, wenn man mir hier nicht helfen will, muss ich mir wohl ein anderes Forum suchen, schade eigentlich.

    Warum hab ich Dir nicht geholfen???
    Einen int in einen String wandelt man wie folgt um:

    int i = 10;
    String *s = i.ToString();
    


  • Und um nach std::string oder std:.wstring umzuwandlen, siehe:
    http://blog.kalmbachnet.de/?postid=18



  • Soweit war ich ja auch schon, aber wie kann ich die 10 als string jetzt ansprechen??? Die muss doch irgendwo als String gespeichert worden sein.
    s hat nur den wert 1 und i ist weiterhin Integer 10. Wo ist die 10 als String?

    P.S: In der Doku gibts leider kein Beispiel dazu.



  • chris090980 schrieb:

    Soweit war ich ja auch schon, aber wie kann ich die 10 als string jetzt ansprechen??? Die muss doch irgendwo als String gespeichert worden sein.

    Wie "ansprechen"? Natürlich steht da jetzt "10" drin und Du kannst mit dem String machen was Du willst...

    chris090980 schrieb:

    s hat nur den wert 1 und i ist weiterhin Integer 10. Wo ist die 10 als String?

    Nein, "s" ist jetzt ein "String" und "enthält" "10" (kannst im Watch Fenster anschauen).

    Wenn Du es mittels cout ausgeben willst, musst Du diesen String in ANSI umwandlen (siehe mein obiger Link).
    Oder Du gibst ihn eben auch mit .NET aus, dann passt alles:

    Console::WriteLine(s);
    

    Du kannst natürlich auch alles *ohne* .NET machen:

    char str[20];
    itoa(i, str, 10);
    cout << str;
    


  • Jo, dein letztes Beispiel ist echt klasse. Habe ich auch schon ausprobiert.
    Also in str wird ja der string (oder array of characters) gespeichert, doch leider kann ich irgendwie nichts damit machen. Ich hab mal "str.length()" eingegeben um die länge zu berechnen, da bekomme ich eine Fehlermeldung, auch
    "str->length" funktioniert nicht. Wie mache ich das?? das ist aber dann auch meine (hoffe ich) letzte frage zu diesem Thema.



  • chris090980 schrieb:

    Jo, dein letztes Beispiel ist echt klasse. Habe ich auch schon ausprobiert.
    Also in str wird ja der string (oder array of characters) gespeichert, doch leider kann ich irgendwie nichts damit machen. Ich hab mal "str.length()" eingegeben um die länge zu berechnen, da bekomme ich eine Fehlermeldung, auch
    "str->length" funktioniert nicht. Wie mache ich das?? das ist aber dann auch meine (hoffe ich) letzte frage zu diesem Thema.

    Das wird auch nicht funktionieren.

    str ist kein Objekt einer Klasse sondern ein Array von chars.
    Drum gibt's auch keine Mehtode 'length()'

    probiers so:

    #include <cstring>
    
    ..
    
    strlen(str)
    

    oder auch:

    long length = 0;
    
        while (str[length] != '\0')
        {length++;}
    


  • jo, das klappt echt super geil jetzt, danke.
    aha, ja muss man hakt wissen, gibts eine liste mit allen funktionen? oder muss ich mich da durch die Doku wühlen?

    P.S.: Kannst du mir verraten wie ich so ein watch-Fenter aufrufe? Ich kenne das aus Borland C++ da konnte man die Variablen zur Laufzeit beobachten, wie geht das in Visual C++, ich find da nix unter den Optionen?



  • chris090980 schrieb:

    jo, das klappt echt super geil jetzt, danke.
    aha, ja muss man hakt wissen, gibts eine liste mit allen funktionen? oder muss ich mich da durch die Doku wühlen?

    Du solltest Dich mal entscheiden was Du machen willst. Es führt nur zu verwirrung auch auch früher oder später zu frust, wenn Du immer alles durcheinander machst... Du machst C / STL und C++/CLI (.NET). Das ist zwar möglich, aber i.d.R. für einen Anfänger etwas sehr verwirrent.
    Für alle drei Dinge gibt es genügend Doku. Das meiste findet man auf msdn.microsoft.com

    chris090980 schrieb:

    P.S.: Kannst du mir verraten wie ich so ein watch-Fenter aufrufe? Ich kenne das aus Borland C++ da konnte man die Variablen zur Laufzeit beobachten, wie geht das in Visual C++, ich find da nix unter den Optionen?

    Das Watch-Fenster gibt es natürluch auch. Entweder im Debug-Menü einblenden oder bei mir ist es links unten... (während dem debuggen)



  • Sorry, hab das Watch Fenster immer noch nicht gefunden. Unter dem Menüpunkt "Debuggen" gibt es kein Watch-Fenster. Und wie füge ich dann dort Variablen ein die ich beobachten möchte?



  • Lass dein Programm laufen (im Debugmodus)

    Dann im Menü "Debug" -> "Window" -> "Watch" -> "Watch 1".
    Oder drück während das Programm läuft "Alt+3"

    Hinzufügen einer Variable zum Watch:
    Am einfachsten: Das Programm bis zu einem Breakpoint laufen lassen,
    dann die Variable markieren (Doppelklick drauf) und dann die Variable
    auf das Watch-Fenster ziehen.

    Oder Rechtsklick auf die Variable -> Add Watch

    Oder Doppelklick auf die erste Zeile im Watch Fensert und Variablenname eingeben.



  • Vielen Dank, das hat mir sehr geholfen. Ist nämlich nicht drauf zu verzichten wenn das Programm etwas größer ist.


Anmelden zum Antworten