Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » umwandeln int nach string

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.01.2007, 14:43 Uhr
Suba Esel



Moin!
Ich wollte ein Programm schreiben, das den Desktop "zumüllt" (einfach nur als Übung, stecken keine bösen Absichten hinter ).
Ich wollte Dateien mit fortlaufendem Namen benutzen. Dazu wollte ich eine For - Schleife hochlaufen lassen und einfach den Zähler an den Dateinamen dranhängen. Das Problem war, dass der Zähler ein int ist, der Dateiname aber ein string. Also musste ich von int nach string umwandeln. Die Möglichkeiten hier im Forum habe ich nicht so wirklich verstanden, also hab ich mir selbst eine gebastelt.....


C++:
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

vector<string> IntToString(int anzahl);

int main()
{
    int anzahl;
    cout << "Wie viele Dateien willst du schreiben?" << endl;
    cin >> anzahl;
    cin.sync();
    system("cls");

    vector<string> liste = IntToString(anzahl);

    string speicherort="C:\\Dokumente und Einstellungen\\All Users\\Desktop\\Test";
    string buffer;

    for (int i = 0; i < anzahl;++i)
    {
    buffer = speicherort;
    buffer += liste[i];
    buffer += ".txt";
    ofstream out(buffer.c_str());
    out << "Hallo" << endl;
    cout << "In " << buffer << " geschrieben." << endl;
    out.close();
    }

    cin.get();
    system("cls");
}

vector<string> IntToString(int anzahl)
{
    ofstream out("Stringwandler.txt");
    for (int i = 1;i <= anzahl;++i)
    {
        out << i << endl;
    }
    out.close();

    ifstream in("Stringwandler.txt");
    string line;
    vector<string> liste;
    for (int i = 0;i < anzahl;++i)
    {
        getline(in,line);
        liste.push_back(line);
    }
    in.close();

    return liste;
}



Meine Frage: gibt es eine einfachere Methode?
--
Simon

Dieser Post wurde am 05.01.2007 um 14:45 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2007, 15:00 Uhr
virtual
Sexiest Bit alive
(Operator)


Eine Einfache Möglichkeit wird in der FAQ beschrieben. Daß dies einfach ist, mag Dir vielleicht nicht unmittelbar einleuchten. Daher mal Dein Beispiel mit dem lexi_cast aus dem Link oben:


C++:
#include <iostream>
#include <vector>
#include <fstream>

#include <sstream>

template< typename TO, typename FROM >
TO lexi_cast(
        const FROM& from) {

        std::stringstream s;
        s<<from;
        TO to;
        s>>to;
        return to;
}

using namespace std;

int main()
{
    int anzahl;
    cout << "Wie viele Dateien willst du schreiben?" << endl;
    cin >> anzahl;


    string speicherort="C:\\Dokumente und Einstellungen\\All Users\\Desktop\\Test";
    string buffer;

    for (int i = 0; i < anzahl;++i)
    {
          buffer = lexi_cast<std::string>(i)+".txt";
          ofstream out(buffer.c_str());
          out << "Hallo" << endl;
          cout << "In " << buffer << " geschrieben." << endl;
          out.close();
    }

    cin.get();
}



Das schöne am lexi_cast ist, daß er für die verschiendesten Typen immer gleich ausschaut.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 05.01.2007 um 15:03 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.01.2007, 15:21 Uhr
Suba Esel



#include <vector> kann raus

man kann using namespace std; auch ganz nach oben schreiben, dann braucht man in der template - funktion das std:: nicht

Die Zeile
C++:
buffer = lexi_cast<std::string>(i)+".txt";
muss werden
C++:
buffer = speicherort+lexi_cast<std::string>(i)+".txt";
, sonst speichert der das nicht auf den Desktop

und ich muss jetzt rausbekommen, was eine template-funktion ist und wie die funktioniert^^
--
Simon

Dieser Post wurde am 05.01.2007 um 15:41 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.01.2007, 16:13 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Na ja, ich denke hier kennt fast jeder die using Anweisung auf den Namespace std, es hat jedoch sein Grund, weshalb es nicht hingeschrieben wird. Zum einen sieht der Code dann besser aus, zum anderen werden sehr viele Hauptsächlich Header-Files schreiben. Da hat using nichts zu suchen weil man den Endanwender janicht zwingen will, den Namespace std zu verwenden. Das ist dann einfach gewohnheit. Zusätlich werden hier auch viele mit boost und anderen Bibliotheken arbeiten - man weiß dann einfach gerne, in welchem Namespace man sich bewegt.

Zu templates, templates sind einfach nur eine Möglichkeit, Code noch vielseitiger (generischer) zu gestalten. Oben steht
C++:
template< typename TO, typename FROM >
das TO wird zu std::string, weil wir das hier
C++:
buffer = speicherort+lexi_cast [ <std::string> ] (i)+".txt";
ihm sagen. FROM wird zu int, weil das der Datentyp von i ist. Also prinzipiel einfach nur Platzhalter für Datentypen, wenn man die Funktion für alle Datentypen und Klassen benutzbar machen will.
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.01.2007, 17:39 Uhr
Suba Esel



zu using namespace std; : das steht in virtuals code drin - nur unter der template-funktion, deshalb meinte ich, dass man das nach oben schieben könnte
ich benutze das seid www.fun-soft.de/showtopic.php?threadid=17077&time=1168013025 (der ersten Antwort von Biohazard)

zu templates (ist jetzt nur ne Beispielfunktion):


C++:
#include <sstream> // sorgt für die definition von std::stringstream?

template< typename TO, typename FROM > // erstellt ein template (was ist das) und sagt, dass der Inhalt von TO und der Inhalt von FROM typnamen sind?
TO lexi_cast(const FROM& from) // erstellt eine Funktion mit dem Rückgabetyp TO und der nicht veränderbaren variable from vom typ FROM? Was bedeutet das "&" ? Das ist doch ein Verweis (was immer [i]das[/i] oder so etwas?
{
        std::stringstream s; // sorgt für?
        s<<from; // tut from in s?
        TO to; // initalisiert eine variable to mit dem typ TO?
        s>>to; // tut s in to?
        return to;
}

int main()
{
        int i = 0; // ein Beispiel
        lexi_cast<std::string>(i) // ruft lexi_cast mit dem Argument i auf und übergibt std::string an das template, das damit was? macht
}



Sorry für blöde Fragen , aber ich lern erst seid nem halben Jahr c++....
--
Simon

Dieser Post wurde am 05.01.2007 um 17:41 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.01.2007, 22:09 Uhr
xXx
Devil


Hmm also ... ein Template ist halt für den Compiler eine "Vorlage".

bsw:

C++:
#include <sstream>
template< typename TO, typename FROM >
TO lexi_cast(const FROM& from)
{
        std::stringstream s;
        s<<from;
        TO to;
        s>>to;
        return to;
}

int main(void)
{
    unsigned short n = 0;
    std::cout << lexi_cast<std::string>(n) << std::endl;

    return 0;
}

Dann setzt du jetzt da mal die Werte ein =>

C++:
std::string lexi_cast(const unsigned short& from)
{
        std::stringstream ss;
        ss << from;
        std::string to;
        ss >> to;
        return to;
}
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.01.2007, 22:58 Uhr
Suba Esel



Sorry xXx, aber das hab ich jetzt nicht so wirklich verstanden^^
Ist aber auch egal, ich hab nächsten mittwoch wieder c++ - AG, weil Montag die Schule wieder losgeht
Dann frag ich noch mal meinen Lehrer

Wie werden dem template denn std::string und n übergeben? Man ruft doch nur die Funktion lexi_cast auf...
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: