Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Namen bzw Strings in einem Array speichern?

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 ] > 2 <
010
15.06.2007, 20:07 Uhr
mischa
Fragender


jep du kannst es unendlich weiter machen
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.06.2007, 23:45 Uhr
0xdeadbeef
Gott
(Operator)


...natürlich wäre es in C++ angebrachter, std::vector<std::string>, und für größere Tiefen boost.multiarray zu benutzen. Und für die Aufgabe würd ich das wahrscheinlich wrappen, so a la

C++:
#include <cstring>
#include <string>
#include <vector>

char **input(char const *hw) {
  std::vector<std::string> names;
  std::string name;
  char **ret;

  while(true) {
    std::cout << hw << std::flush;
    std::getline(std::cin, name);

    if(name == "") break;

    names.push_back(name);
  }

  char **ret = new char*[names.size()];
  for(int i = 0; i < names.size(); ++i) {
    ret[i] = new char[names[i].size() + 1];
    std::strcpy(ret, names.c_str());
  }

  return ret;
}


...was natürlich für jede praktische Anwendung völliger Bockmist ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 15.06.2007 um 23:51 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.06.2007, 23:50 Uhr
Kest
saint


Ich weiß nicht so recht. Gehört denn >boost< schon zum Standard?
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
15.06.2007, 23:52 Uhr
0xdeadbeef
Gott
(Operator)


Boost ist an externen Bibliotheken so ziemlich das nächste, was du zum Standard kriegst. Höchst portabel. Und du willst nicht wirklich einen std::vector<std::vector<std::vector<std::vector<std::string> > > > benutzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.06.2007, 23:53 Uhr
Kest
saint


Das ist ja gar nicht der Punkt! Wir sind hier unter >C / C++ (ANSI Standard)<
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
16.06.2007, 00:54 Uhr
0xdeadbeef
Gott
(Operator)


...

Das ist jetzt aber schon ein bisschen pedantisch.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
22.06.2007, 19:52 Uhr
HansGeorg



OK ich hab das Problem schon vor einigen Tagen jetzt mit den klassischen String Arrays gelöst. Jetzt hab ich eine neue aufgabe von unserem Lehrer bekommen. Ich soll jetzt 2 strings im array vertauschen können, jedoch geht daran irgendwas nicht.

Ich mache irgendwas falsch mit den Zeigern.

Ich wäre euch dankbar wenn Ihr mal drüberschauen könntet und mir helfen könntet


C++:
void vertauschen(char * x)
{
  char temp;

  temp = *x[5];
  *x[4] = *x[o+1];
  *x[4+1] = temp;
}

};

void main (void)
{
  int anzahl;

  cout<<"Wieviele Strings willst du eingeben: "<<endl;
  cin>>anzahl;

  char ** n = new char * [anzahl];
  char ** vn = new char *[anzahl];

  for (int i = 0; i < anzahl; i++)
  {
    n[i]=input("Name= ");
    vn[i]=input("Vorname= ");
  }

  bool abc;

  vertauschen(&n);
  vertauschen (&vn);

  for (int i = 0; i < anzahl; i++)
  {
    cout<<n[i]<<'\t'<<vn[i]<<endl;
  }

  delete[]n;
  delete[]vn;

  getch();
}



Was mache ich falsch? Ich versteh das irgendwie nicht.


Bearbeitung von 0xdeadbeef:

Mal etwas lesbarer eingerückt.


Dieser Post wurde am 22.06.2007 um 21:04 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
22.06.2007, 21:06 Uhr
0xdeadbeef
Gott
(Operator)


Ich geh mal davon aus, dass das }; ein Tippfehler ist und da nicht hingehört. Ansonsten noch generell, main istimmer int, das liest sich also statt

C++:
void main(void)



C++:
int main()


Ansonten, die vertauschen-Funktion ergibt wenig Sinn, weil sie ja eigentlich das ganze String-Array übergeben kriegen muss, um darin Strings zu vertauschen, und du übergibst ihr auch keinen char*, sondern einen char*** - &n und &vn jeweils.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
23.06.2007, 19:31 Uhr
Kest
saint


Da ja nur zur Laufzeit >anzahl< bekannt ist, ist das... >falsch<. Bei einer ungeraden zahl würde das nicht gehen (vorausgesetzt ich hab richtig verstanden, was du vorhattest).

Also besser in diesem Fall wäre

C++:
void vertauschen(char** text){
     char* _t=text[0];
     text[0]=text[1];
     text[1]=_t;
     }

int main()
{
    char** text=new char*[2];
    text[0]="Hans";
    text[1]="Georg";
    vertauschen(text);
}


Und richtiger wäre zwei >strings< zu vertauschen und nicht die ganze Folge:

C++:
void vertauschen(char*& a, char*& b){
     char* _t=a;
     a=b;
     b=_t;
     }

int main()
{
    char** text=new char*[2];
    text[0]="Hans";
    text[1]="Georg";
    vertauschen(text[0], text[1]);
}



Und noch besser wäre, statt >verstauschen< >swap< aus >algorithm< zu verwenden:

C++:
//...
#include <algorithm>

int main()
{
//...
std::swap(text[0], text[1]);
}




Und wenn dein Compiler sowas zulässt:

C++:
void vertauschen(char * x)
{//...
}


int main (void)
{
  //...
  char ** n = new char * [anzahl];
  char ** vn = new char *[anzahl];
  vertauschen(&n);
  vertauschen (&vn);
}
sollteste dir 'nen anderen besorgen, weil er dann zu... >C< wäre (ob das jemand versteht !?!?!?).
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 23.06.2007 um 20:01 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: