Arrays... :< (:
-
Nur falls du (warum auch immer) char-Arrays nehmen musst:
C++ kennt noch als Erbe von C die C-Strings.
Das sind char-Arrays, wo das Ende vom Text durch das Zeichen '\0' ( = 0) gekennzeichnet wird. Man spricht da von Nullterminiert.Die meisten Funktionen gehen bei einem char-Array von so einem C-String aus. Auch cin und cout
Das Problem ist, das die Funktionen keine Kenntnis über die Größe des Arrays haben. (Wenn du die Größe nicht extra angibst)
Darum mach das Array ausreichend groß. 5 ist wirklich sehr sehr wenig.char strings_5[1000] = ""; // Leerstring //oder char strings_5[1000] = "Hallo Welt!";(Beachte, dass du diese Art zuweisung nur bei der Definiton machen kannst)
nImA87 schrieb:
Was muss ich machen, damit er sich auch mit weniger als 5 Zeichen zufrieden gibt.
Habe schon '\n' als escape-bedingung versucht
Wie hast du das versucht? aus einer Schleife kommt man mit
breakraus.
Aber du musst die Zeichen nicht einzeln einlesen.nImA87 schrieb:
/*Wenn ich die Vertikale in eine lange Reihe, richtung Horizont x-fach wiederholen lassen möchte, muss ich...
Eine Schleife, die x Durchläufe hat. for bietet sich da an.
for (index_char = 0; strings_5[index_char] != '\0'; index_char++) // Solange das Zeichen ungelich '}' ist { for (int ix = 0; ix < x; ++ix) cout << "" << strings_5[index_char]; cout << endl; }Wenn es keinen guten Grund* für char-Arrays gibt, dann nimm std::string
*Vorgabe vom Lehrer ist kein guter Grund, aber leider eine der Ausnahmen.
-
nImA87 schrieb:
Danke!!!

Jedoch, kenne ich noch keine Klassen bzw. Objekte ( habe vorgestern mit "Programmieren" lernen, angefangen ), weshalb ich es auf meine Weise versuchen wollte.^^
Die Codezeilen, haben auch keinen höheren Ziel, sondern dienen lediglich dazu, mich ausführlich mit den Arrays zu befassen. Von daher versuche ich, möglichst alles, selber zu lösen. Das war/ist meine Intention. Keine Ahnung, warum ich mir gerade sowas als Ziel gesetzt habe. Aber meine Neugierde bzgl. Realisierung, ist einfach zu groß.

ps: Es ist, wie du/ihr natürlich erraten habt, eine "Konsolenanwendung".
Einfach die Codezeilen compilieren, dann könnt ihr wahrscheinlich eher nachvollziehen, was ich hiermit.../*Wenn ich die Vertikale in eine lange Reihe, richtung Horizont x-fach wiederholen lassen möchte, muss ich... cout << "" << strings_5[index_char]; cout << "" << strings_5[index_char]; cout << "" << strings_5[index_char]; . . . cout << "" << strings_5[index_char] << endl; ... eingeben?!?... Wie kann ich das mit einer Schleife lösen??? */... bezwecke.^^
Habe nun die einfache Loesung, da ich jetzt mehrdimensionale Arrays kennengelernt habe. :p
@DirkB
Strings sind doch nichts anderes als char-Arrays oder habe ich da etwas falsch verstanden?
@FurbleWurble
Ich moechte auch zuerst die Grundlagen wirklich verstehen und verinnerlichen.
Und nein ich langweile mich noch nicht, da ich mich 3-4 Stunden am Tag damit beschaeftige und somit nicht vom Lernen uebersaettigt bin. Studium beginnt erst in Okt. 14.
Mein großes naestes Ziel ist, ein Snakespiel mittels SFML zu programmieren.
Aber vorher moechte ich, Arrays, Zeiger und Klassen verstanden haben und anwenden koennen, ohne staendig im Internet nachschlagen zu muessen.ps: Danke fuer die vielen Tipps!
Die waren ALLE sehr hilfreich! 
-
nImA87 schrieb:
Strings sind doch nichts anderes als char-Arrays oder habe ich da etwas falsch verstanden?

Strings (oder auf deutsch Zeichenketten) dienen zur Verarbeitung von (vielen/zusammenhängenden) Zeichen.
In C hat man sich dafür auf nullterminierte*
char-Arrays geeinigt.
(Es ist nur eine Vereinbarung, aber darauf baut auch die C-Standardlibrary auf)
Arrays haben einige Nachteile. Du kannst die Größe im nachhinein nicht mehr ändern und auch schlecht bestimmen.
Daher kann es vorkommen, dass man über die Grenzen des Arrays zugreift, wenn man nicht extrem aufpasst.Darum hat man in C++ die Klasse
stringeingeführt.
Diese hat die Nachteile nicht mehr.*das ist wichtig und darf nicht vergessen werden
-
Du kannst die Größe [...] schlecht bestimmen.
Was soll das denn heißen?
Daher kann es vorkommen, dass man über die Grenzen des Arrays zugreift, wenn man nicht extrem aufpasst.
Dieser Punkt ist falsch - und träfe sowieso auf
stringund normale Arrays gleichzeitig zu, wodurch er keinen Nachteil von Arrays gegenüberstringdarstellt.
-
Arcoth schrieb:
Du kannst die Größe [...] schlecht bestimmen.
Was soll das denn heißen?
Wenn du ein char [] nimmst um den Namen von Leuten einzulesen kannst du schwer festlegen wie lang das Array sein soll. 32? 128? 1024? Es ist immer ein Kompromiss aus Sicherheit und Verschwendung. string hat das Problem nicht, sondern wird so groß wie nötig.
Gleiches für den zweiten Punkt, man kann bei string immer irgendwas per += dranhängen, bei Arrays muss man aufpassen dass es nicht zu viel wird.
-
cout << "" << strings_5[index_char] << endl;kann man auch durch:
cout << strings_5[index_char] << endl;ersetzten, nur ein kleiner Tipp

-
LightBoom schrieb:
cout << "" << strings_5[index_char] << endl;kann man auch durch:
cout << strings_5[index_char] << endl;ersetzten, nur ein kleiner Tipp

kann man auch durch:
cout << index_char[strings_5] << endl;ersetzen....

-
Synonym schrieb:
LightBoom schrieb:
cout << "" << strings_5[index_char] << endl;kann man auch durch:
cout << strings_5[index_char] << endl;ersetzten, nur ein kleiner Tipp

kann man auch durch:
cout << index_char[strings_5] << endl;ersetzen....

Meinte damit das man kein "" reinschreiben muss

-
DirkB schrieb:
nImA87 schrieb:
Strings sind doch nichts anderes als char-Arrays oder habe ich da etwas falsch verstanden?

Strings (oder auf deutsch Zeichenketten) dienen zur Verarbeitung von (vielen/zusammenhängenden) Zeichen.
In C hat man sich dafür auf nullterminierte*
char-Arrays geeinigt.
(Es ist nur eine Vereinbarung, aber darauf baut auch die C-Standardlibrary auf)
Arrays haben einige Nachteile. Du kannst die Größe im nachhinein nicht mehr ändern und auch schlecht bestimmen.
Daher kann es vorkommen, dass man über die Grenzen des Arrays zugreift, wenn man nicht extrem aufpasst.Darum hat man in C++ die Klasse
stringeingeführt.
Diese hat die Nachteile nicht mehr.*das ist wichtig und darf nicht vergessen werden
Ein C Programmierer baut sich soetwas einfach.

xxxx.h
typedef struct { char *ptrdynmem; // memory size_t dynmemlen; // memory size size_t intmembuflen; // is only used internally! } DYNMEMVECTOR; typedef struct { char *ptrdynstr; // memory size_t dynstrlen; // memory size without zero term. size_t intmembuflen; // is only used internally! } DYNSTRVECTOR;xxxx.c
#define MEMBUFSIZE 1024 int DynMemCat(DYNMEMVECTOR *ptrdynmem ,const char *srcmem ,size_t srclen) { size_t toallocsize = 0; char *mem = NULL; if(srcmem == 0) return 0; if(srclen > ptrdynmem->intmembuflen) { toallocsize = srclen - ptrdynmem->intmembuflen; mem = realloc(ptrdynmem->ptrdynmem ,ptrdynmem->intmembuflen+ptrdynmem->dynmemlen+toallocsize+MEMBUFSIZE); if(mem == NULL) return 0; ptrdynmem->intmembuflen = MEMBUFSIZE; ptrdynmem->ptrdynmem = mem; } else { ptrdynmem->intmembuflen -= srclen; } memcpy(ptrdynmem->ptrdynmem+ptrdynmem->dynmemlen ,srcmem ,srclen); ptrdynmem->dynmemlen += srclen; return 1; } void FreeDynMemCat(DYNMEMVECTOR *ptrdynmem) { ptrdynmem->dynmemlen = 0; ptrdynmem->intmembuflen = 0; free(ptrdynmem->ptrdynmem); ptrdynmem->ptrdynmem = NULL; return; } int DynStrCat(DYNSTRVECTOR *ptrdynstr ,const char *srcstr) { size_t toallocsize = 0 ,srcstrlen = 0; char *mem = NULL; if( srcstr == NULL ) return 0; if( *srcstr == 0 ) return 0; srcstrlen = strlen(srcstr); if(srcstrlen > ptrdynstr->intmembuflen) { toallocsize = srcstrlen - ptrdynstr->intmembuflen; mem = realloc(ptrdynstr->ptrdynstr ,ptrdynstr->intmembuflen+ptrdynstr->dynstrlen+toallocsize+MEMBUFSIZE+1); if(mem == NULL) return 0; ptrdynstr->intmembuflen = MEMBUFSIZE; ptrdynstr->ptrdynstr = mem; } else { ptrdynstr->intmembuflen -= srcstrlen; } memcpy(ptrdynstr->ptrdynstr+ptrdynstr->dynstrlen ,srcstr ,srcstrlen); ptrdynstr->dynstrlen += srcstrlen; ptrdynstr->ptrdynstr[ptrdynstr->dynstrlen] = '\0'; return 1; } void FreeDynStrCat(DYNSTRVECTOR *ptrdynstr) { ptrdynstr->dynstrlen = 0; ptrdynstr->intmembuflen = 0; free(ptrdynstr->ptrdynstr); ptrdynstr->ptrdynstr = NULL; return; }
-
Hi,
meint ihr nicht das so eine Diskussion für eine Anfängerfrage etwas zu weit geht(und verwirrt)?
naja egal.
Hier ein par links die dir bestimmt weiter helfen:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Inhaltsverzeichnisund speziell zu ein/ausgaben sowie schleifen:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Einführung_in_C%2B%2B/_Einfache_Ein-_und_Ausgabe
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Einführung_in_C%2B%2B/_Schleifenund evtl auch noch das:
http://www.cpp-entwicklung.de/cpplinux/cpp_main/node1.htmlMfG BabCom