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 ]
000
14.06.2007, 17:21 Uhr
HansGeorg



Hallo,

ich hab folgende Aufgabe gestellt bekommen:

Entwickeln Sie ein Programm, das Sie erlaubt beliebig viele Namen in einem Array zu speichern. Die Namen sollen mit dieser Funktion eingegeben werden:

C++:
char *input(char *hw) {
  char *x;
  x = new char[4096];

  cout << hw;
  cin >> x;

  char *neu = new char[strlen(x) + 1];

  strcpy(neu, x);

  delete[] x;

  return neu;
}


Mein Problem ist nun, wie bringe ich die Namen davon in ein variables Array?

Ich wäre euch sehr dankbar wenn Ihr mmit damit helfen könntet

Gruß

Hans

Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt, Code sinnvoll eingerückt. Nächstes mal selbst machen.


Dieser Post wurde am 14.06.2007 um 22:16 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.06.2007, 17:25 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wenn du eh C++ verwendest dann nimm statt den Arrays std::string und std::vector
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.06.2007, 17:27 Uhr
HansGeorg



Hallo, das ist ja gerade das Problem. Ich würde es ja gerne benutzen, aber ich darf es nicht. Ich soll es mit Char Arrays machen wie man es auch im normalen C macht bzw gemacht hat.

Natürlich wäre es mit den std:string um einiges leichter, würde ich auch nutzen, sonst hätte ich die Lösung schon längst.

Daher stehe ich im Moment auf dem Schlauch :-\

Unser Lehrer möchte das leider so haben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.06.2007, 17:57 Uhr
HansGeorg



Ich hab mir das so irgendwie gedacht:

char *array = new char [10];

array[1] = ergebnis der funktion.

nur irgendwas scheitn damit nicht zu gehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.06.2007, 22:22 Uhr
0xdeadbeef
Gott
(Operator)


Machs mit Zeigern auf Zeiger, also char**:

C++:
char **array;

array = new char*[10];
for(int i = 0; i < 10; ++i) {
  array[i] = new char[100];
}


...und nachher bei der Freigabe entsprechend umgekehrt. Es empfiehlt sich dafür, die Allokation und Freigabe in Funktionen auszulagern, also

C++:
char **allocate_string_array(std::size_t dimx, std::size_t dimy) {
  char **array;

  array = new char*[dimx];
  for(std::size_t i = 0; i < dimx; ++i) {
    array[i] = new char[dimy];
  }

  return array;
}

void free_string_array(char **array, std::size_t dimx) {
  for(std::size_t i = 0; i < dimx; ++i) {
    delete[] array[i];
  }
  delete[] array;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.06.2007, 14:33 Uhr
HansGeorg



Aha vielen dank. könntest du mir nochmal bitte etwas genauer erklären, wieso ich ** nehmen muss? Das ist mir noch nicht so ganz klar.

Aber sonst ergibt das viel sinn. Ich hatte es ja schon fast, nur das mit den Zeigern ist so eine Sache. Mir ist im Moment einfach nicht so klar wieso ich zeiger auf zeiger benutzen muss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.06.2007, 15:12 Uhr
Kest
saint


Hi!

Ein Zeiger (char*) zeigt auf ein Feld von Zahlen.
Ein Zeiger-Zeiger (char**) zeigt auf ein Feld von Zeigern (char*), die wiederum auf ein Feld von Zahlen zeigen.

So ist auch z.B. Zeiger-Zeiger-Zeiger-Zeiger ... usw möglich.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.06.2007, 15:16 Uhr
HansGeorg



Heißt das dann also das ich in das Array nur die Adresse der Namen die ich in Strings mit der Funktion Input speichere?

Das Array ist ja auch noch in der Größe unbekannt, darum ja der eine Zeiger, denn ein variables array erstelle ich ja so:

char * test = new char[größe des arrays]

Das ist also dann ein String Array das wiederum Speicheradressen der einzelnen Namen aufnimmt. Richtig?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.06.2007, 15:22 Uhr
Kest
saint


Mit

C++:
char * test = new char[größe des arrays]

hast du lediglich >größe des arrays< neu char-Variablen definiert, also ist >test[0]< einfach ein char.
test[0] kann also nur ein Zeichen (char) speichern. (test[0]='A';)

Mit

C++:
char** test = new char*[größe des arrays]

haste >größe des arrays< Zeiger-auf-char definiert, also ist >test[0]< ein Zeiger, der auf ein Feld von char's zeigt.
test[0] kann einen Zeiger auf einen C-string speichern (test[0]="Hallo, World";)
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 15.06.2007 um 15:29 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.06.2007, 18:50 Uhr
HansGeorg




Zitat von Kest:

Mit

C++:
char** test = new char*[größe des arrays]

haste >größe des arrays< Zeiger-auf-char definiert, also ist >test[0]< ein Zeiger, der auf ein Feld von char's zeigt.
test[0] kann einen Zeiger auf einen C-string speichern (test[0]="Hallo, World"


Dazu hätte ich jetzt doch noch ne frage.

heißt das das char** also auch auf das new char * zeigt? denn du hast ja recht ich möchte ja nicht nur ein zeichen abspeichern sondern auf ein anderen char array verweisen.

würde das eigentlich auch noch so gehen?

char*** test = new char ** [größe]

das sozusagen noch weiter verlinkt wird? so ne art zeiger auf nem zeiger auf nem zeiger?
 
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: