Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String Array

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
12.07.2004, 13:34 Uhr
~meph1
Gast


Hallo,

ich steh gerade ziemlich auf dem Schlauch.
Ich bin C++ Anfänger und habe bisher nur Erfahrungen mit Java und PHP.

Ich soll in C++ ein Textfile Zeilenweise auslesen, die Zeile in mehrere Wörter zerlegen und die einzelnen Wörter in einem Array speichern.

Das Zeilenweise einlesen hab ich hinbekommen, und die Zeile hab ich mit strtok in einzelne Worte zerlegt.

Was mir jetzt irgendwie nicht gelingen will ist ein String-Array anzulegen, dessen Elemente wiederum Strings sein können
Bsp.:
string[0] = "Hallo";
string[1] = "du";
string[2] = "da";


Wer kann mir da auf die Sprünge helfen?

Danke
Christoph
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.07.2004, 14:03 Uhr
9ball



meinst in etwa sowas?

C++:
#include <stdio.h>
int main()
{
    char *string[] = {"Hallo", "du", "da"};
    printf ("%s %s %s\n", string[0], string[1], string[2]);
}


--
one for all and all for one
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.07.2004, 14:04 Uhr
freshman



sobald du weißt wie viele Elemente dein Array haben soll, mußt du diese dynamisch allokieren mit new
Bsp.:

C++:
//Allokation
string * pStr = new string[numOfElements];
//arbeiten auf pStr[0 bis numOfElements-1]
//Speicherfreigabenicht vergessen, sobald dieser nicht mehr gebraucht wird:
delete []pStr;
//bei C benutzte malloc und free


--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);

Dieser Post wurde am 12.07.2004 um 14:06 Uhr von freshman editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.07.2004, 14:06 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich denke, du solltest Dir mal std::vector anschauen, auch die sache mit dem strtok finde ich umständlich. Das gesamte Einlesen+in Array/Vector speichern ist in C++ ein Einzeiler:

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

int main()
{
        std::fstream in("textdatei");
        std::vector<std::string> woerter;

        // Datei einlesen, in Woerter zerlegen
        std::copy(std::istream_iterator<std::string>(in),
                      std::istream_iterator<std::string>(),
                      std::back_inserter(woerter));

        // Mit array arbeiten
        for(int i=0; i<woerter.size(); ++i)
        {
                std::cout<<"Wort "<<(i+1)<<": "<<woerter[ i]<<std::endl;
        }
}




Bearbeitung:
Der Übersichthabler habe ich mal den einzeiler zu einem Dreizeiler gemacht

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 12.07.2004 um 14:08 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2004, 14:28 Uhr
0xdeadbeef
Gott
(Operator)


Ich vermute, das an der Stelle auch Satzzeichen usw. rausgeschnitten werden sollen. Dann ist man mit boost mal wieder deutlich besser dran

C++:
#include <iostream>
#include <string>

#include "boost/tokenizer.hpp"
#include "boost/spirit/iterator/file_iterator.hpp"

typedef boost::tokenizer<
  boost::char_delimiters_separator<char>,
  boost::spirit::file_iterator<> > file_tokenizer;

int main(int argc, char *argv[]) {
  if(argc < 2)
    return -1;

  boost::spirit::file_iterator<> first(argv[1]);

  if(!first)
    return -2;

  boost::spirit::file_iterator<> last = first.make_end();

  file_tokenizer tok(first, last);
  for(file_tokenizer::iterator i = tok.begin(); i != tok.end(); ++i)
    std::cout << *i << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.07.2004, 14:36 Uhr
~meph1
Gast


Vielen Dank.
Die Lösung von Virtual funktioniert auf Anhieb.
Da wäre ich aber wahrscheinlich frühestens in einer Woche drauf gekommen.
Muss wahrscheinlich erstmal lernen mich in C++ genauso durch die Hilfe zu angeln, wie in Java durch die API.

Eine Frage hätte ich aber noch, wie bekomme ich es bei virtuals lösung hin, dass er nach semikolon ( auftrennt und nicht nach leerzeichen?

Danke
Christoph
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.07.2004, 15:00 Uhr
0xdeadbeef
Gott
(Operator)


Ersetz den std::copy-Befehl durch

C++:
while(in) {
  std::string s;
  std::getline(in, s, ';');
  woerter.push_back(s);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
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: