zyklische warteschlange für strings! :/
-
hallo,
hab da mal ein naja, mehr oder weniger kleines problem! folgende aufgabenstellung:
programmieren sie eine zyklische warteschlange für strings. verwenden sie ein char * feld konstanter länge (13) für die pointer die auf die strings zeigen. *Verwirrung* . lesen sie zum einfügen eines elements einen string von der konsole ein (in ein pufferfeld), ermitteln seine länge, allokieren den entsprechenden speicherplatz dynamisch und fügen einen eintrag in die warteschlange ein.
mir is nich ganz klar, wie ich dem char * feld strings zuweisen soll, wenn ich das recht verstehe.
int main(void) { char *feld; feld = new char[13]; string s1 = "hallo";
aber wie jetzt weiter? wie sag ich zb. feld[0] = s1 oder so?! geht das überhaupt!
gruss
-
ich würde eher vermuten das das so gemeint ist...
char *warteschlange[13]; //feld aus 13 char-zeigern...
und jetzt sollst du vermutlich c-like (also mit malloc speicherplatz für jeden string den du einliest allokieren) wenn du ein std::string benutzen dürftest hätte da bestimmt nix von speicherplatz dynamisch allokieren gestanden weil das macht der ja von selber...
-
hmm.. ja! aber jetzt kann ich ja praktisch nur 1 zeichen einlesen, is ja n char feld, oder seh ich das falsch??
ich verstehe die aufgabenstellung halt dann so, dass ich halt das
char *warteschlange[13]; //feld aus 13 char-zeigern...
habe, und jetzt noch zusätzlich jeweils 13 strings einlese und jeweils warteschlange[0] auf string1 ?! aber das geht ja nich .. oder? irgendwie bin ich grad durcheinander ..
*grr*/edit:
die aufgabe is übrigens zum thema : dynamische speicherverwaltung, also mit new und delete? oder?
-
äh nein du sollst kein feld von chars nehmen sondern ein feld von char-pointers (also char* )... ist so als wenn du ein 2d-array verwendest...
dieses feld von char* soll die feste grösse 13 haben...so und wenn du jetzt den ersten string einfügst allokierst du für den ersten charpointer speicher der entsprechenden länge...
also
warteschlange[0]=(char*)malloc(....); . . .
die aufgabe is übrigens zum thema : dynamische speicherverwaltung, also mit new und delete? oder?
also wenn du c++ verwenden darfst jo dann nimmt man new und delete wobei dass dann in deinem fall keinen sinn mehr macht weil in c++ keiner mehr freiwillig ein char-array verwendet, deshalb hatte ich vermutet das du das dann in c machen sollst wo man den speicher mit malloc und free allokiert...
-
#include <iostream> using namespace std; int main(void) { char *feld[13]; // feld aus 13 char zeigern char input[30]; cout << "eingabe: "; cin >> input; feld[0] = (char*)malloc(sizeof(input)); feld[0] = input; cout << feld[0] << endl; }
ah, ich glaub ich habs geblickt!
so klappt es dann jetzt! dankööö ..
also wenn du c++ verwenden darfst jo dann nimmt man new und delete wobei dass dann in deinem fall keinen sinn mehr macht weil in c++ keiner mehr freiwillig ein char-array verwendet, deshalb hatte ich vermutet das du das dann in c machen sollst wo man den speicher mit malloc und free allokiert...
ja, soll in c++ sein, aber der prof hat n schaden! naja, wird schon so hinhaun!
-
#include <iostream> using namespace std; int main(void) { char *feld[13]; // feld aus 13 char zeigern char input[30]; cout << "eingabe: "; cin >> input; feld[0] = (char*)malloc(sizeof(input)); //also wenn du c++ verwenden sollst nimmt new... ausserdem sollst du ja nicht sizeof(intput allokieren sondern strlen(input)+1 feld[0] = input; //aua ganz übel... hier musst du strcpy oder sprintf verwenden aber das gleichsetzen erfüllt nicht den von dir gewünschten zweck und du hast schöne speicherlöcher... cout << feld[0] << endl; }
-
boah nee, ich komm nich weiter,was n scheiss!
ich krieg immer das hier bei der strcpy funktion:test.cpp:14: error: invalid conversion from `char*' to `char'
#include <iostream> using namespace std; int main(void) { char *feld[13]; // feld aus 13 char zeigern char input; cout << "eingabe: "; cin >> input; input = new char[strlen(input)+1] // so hab ich mir das gedacht, aber ka ob das richtig is strcpy[feld[0],input);
sorry, ich bin noch voll anfaenger, waere trotzdem nett wenn mir nochma jemand helfen koennte..
danke
-
dein input ist ein einzelner char und kein char*. und nicht vergessen fuer input speicher zu allokieren.
was auch immer
-
hm... also. Der Compiler meckert, er kann nciht char in char* casten.
Dann schau dir doch mal die Varibale Input an, und was sie für einen Datentyp hat
-
#include <iostream> using namespace std; int main(void) { char *feld; feld = new char[13]; char *input; cout << "eingabe: "; cin >> input; input = new char[strlen(input)+1] // so hab ich mir das gedacht, aber ka ob das richtig is strcpy[feld[0],input);
das gleiche prob .. fehler kommt in der zeile strcpy! hmpf! ich hab schon so viele c++ tutorials durchforstet aber fuer dieses prob find ich einfach nuescht ..
-
Hallo,
Es macht zwar nicht viel sin aber man kann die Aufgabe auch so verstehen.
#include<string> #include<iostream> using namespace std; int main(){ string *queue[13]; sring inp; for(int i=0;i<13;i++){ cout<<"Eingabe: "; cin>>inp; queue[i]=new string(inp); } //delete folgt }
Und immer schön wieder freigeben mit delete am ende. Oder aber er sollte das Array dynamisch machen. Kann ja auch sein.
-
@icies:
schau dir mal das zeichen nach strcpy an... da sollte eignetlich eine runde klammer sein, da es ja ein funktionsaufruf sein sollte... also ein einfacher tippfehler
-
bin immer noch am rumbasteln ..
das feld für die pointer auf die strings soll ja ein char * sein ..
also ham wir erstmal:
int main(void) { char *feld; feld = new char[13];
dann soll ein string von der console eingelesen werden in ein pufferfeld
cout << "bitte string eingeben" << endl; string pufferfeld; cin >> pufferfeld;
jetzt soll die länge vom pufferfeld ermittelt werden, der entspr. speicherplatz dynamisch allokiert werden und den eintrag in die warteschlange eintragen!
int laenge; laenge = strlen(pufferfeld); feld[0] = new char[laenge]; // ich bin mir hier nich sicher, kommt auch ein fehler, wie kann ich jetzt feld[0] die länge sagen? ich muss es doch da allokieren? strcpy(feld[0], pufferfeld); // ebenfalls fehler "invalid conversion from 'char' to 'char*'
wäre nett wenn mir nochmal jemand helfen könnte, dankö!