Länge von einem 2-dimensionalem Array und StringBuffer?
-
Hallo Leute!
Folgende Fragen und bitte nicht auf Literatur aufmerksam machen, denn die krieg ich erst übermorgen. Aber bis dahin würde ich gerne mein Programm zu Ende (um-)schreiben.
Habe folgende Methode:
bool whatever(char spielfeld[][10], int spalte, int zeile, char zeichen)
{......
}
Muss ich im Methodenrumpf schon das char-Array deklarieren, obwohl ich noch gar nicht weiß, wie viel da überhaupt rein sollen?
Das nächste ist, in Java habe ich die tolle Variable length, die mir die Anzahl der Elemente im Array angibt.
Möchte ich nun spielfeld[0].length machen, habe ich in C++ ein dickes Problem.
Natürlich kann ich int size = sizeof(spielfeld); machen, ABER:
Wie gehe ich denn z.B. bei so etwas vor:while (go < spielfeld[0].length && go2 < length)
{
//
}
Wat denn nu? Bei dem go2 kann ich ja size hernehmen, aber bei go < size kommt nur Mist raus (was ja klar ist). Wie kann ich das simpelst Prob beheben?Und ferner habe ich festgestellt, dass es kein StringBuffer Header gibt für C++.... Gibt es wenigstens eine ähnliche Header?
Danke im Voraus...
-
Java-Coder* schrieb:
...
Das nächste ist, in Java habe ich die tolle Variable length, die mir die Anzahl der Elemente im Array angibt. ...Wieso ? gibt's doch in C++ auch:
bool whatever(vector<string> spielfeld, size_t spalte, size_t zeile, char zeichen) { cout << "Anzahl der Strings: " << spielfeld.size() << "\n"; cout << "Länge des 4.ten Strings: " << spielfeld[3].length() << "\n"; // .. oder mit Limit-Prüfung: spielfeld.at(3).length()Du würdest doch in Java auch keine char-Arrays verwenden, sondern einen String oder -Buffer...
Und wenn man "Arrays mit Längen oder mit dynamsciher Größe" braucht, nimmt man in C++ eben vector (oder irgendeinen anderen Container)...Gruß,
Simon2.
-
Simon2 schrieb:
Java-Coder* schrieb:
...
Das nächste ist, in Java habe ich die tolle Variable length, die mir die Anzahl der Elemente im Array angibt. ...Wieso ? gibt's doch in C++ auch:
bool whatever(vector<string> spielfeld, size_t spalte, size_t zeile, char zeichen) { cout << "Anzahl der Strings: " << spielfeld.size() << "\n"; cout << "Länge des 4.ten Strings: " << spielfeld[3].length() << "\n"; // .. oder mit Limit-Prüfung: spielfeld.at(3).length()Du würdest doch in Java auch keine char-Arrays verwenden, sondern einen String oder -Buffer...
Und wenn man "Arrays mit Längen oder mit dynamsciher Größe" braucht, nimmt man in C++ eben vector (oder irgendeinen anderen Container)...Gruß,
Simon2.
Das Prob ist, ich brauch an dieser Stelle das 2-dimensionale Char-Array um das Spielfeld darzzustellen... String empfiehlt sich überhaupt nicht...
Es gibt die Methode length() ? Da sagt mir mein C-Compiler doch was anderes...
Um die Sache mit den Buffern konkreter zu machen... Hier ein Beispiel wo ich das brauche, was aber nicht geht..
void showSpielfeld(char spielfeld[][10]) { int size = sizeof(spielfeld); string Geruest; string zeile_start = " "; // erste Zeile 1 2 3 4 string zeile_end = "-"; // letzte Zeile ------- string zeile_divide = "|"; // Trennzeile |-----| if (/*spielfeld[0].length*/ size > 9) { for (int i = 1; i <= /*spielfeld[0].length?????*/ size; i++) zeile_start.append((i/10==0) ? " " : i/10).append(" "); zeile_start.append("\n "); } for (int i = 1; i <= /*spielfeld[0].length????*/ size /*was falsch ist*/; i++) { zeile_start.append(i%10).append(" "); zeile_divide.append((i==/*spielfeld[0].length*/ size)? "-|" : "--"); zeile_end.append("--"); } cout << zeile_start; cout << zeile_divide; for (char arrZeile[] : spielfeld) { //alle Zeilen durchgehen for (char arrSpalte : arrZeile) { //alle Spalten durchgehen Geruest.append("|"); Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte); } Geruest.append("|\n"); } Geruest.append(zeile_end).append("\n"); cout << Geruest); }
-
der std::vector ist so ähnlich wie java arrays, naja, nicht wirklich, aber tuts für das was du willst
-
Java-Coder* schrieb:
Das Prob ist, ich brauch an dieser Stelle das 2-dimensionale Char-Array um das Spielfeld darzzustellen... String empfiehlt sich überhaupt nicht...
Wieso empfiehlt sich ein String nicht? Bezweifle ich doch.
Es gibt die Methode length() ? Da sagt mir mein C-Compiler doch was anderes...
Was denn nun? C++ oder C?
-
Konrad Rudolph schrieb:
Wieso empfiehlt sich ein String nicht? Bezweifle ich doch.
An der Stelle geht es nicht, weil ich das im ganzen Programm schon so realisiert hab.... Mann, wieso kann es nicht einfach eine length für Arrays geben?

Konrad Rudolph schrieb:
Was denn nun? C++ oder C?
C++...
-
Java-Coder* schrieb:
...
Das Prob ist, ich brauch an dieser Stelle das 2-dimensionale Char-Array um das Spielfeld darzzustellen...-> vector<vector<char> >
Java-Coder* schrieb:
...
Es gibt die Methode length() ? Da sagt mir mein C-Compiler doch was anderes...Mein COBOL-Compiler auch ... aber das spielt doch hier beides keine Rolle, oder ?
std::string und std::vector haben beide "length" (heissen vector::size(), string::size() und string::length()) und Anderes habe ich auch nicht behauptet.Java-Coder* schrieb:
Konrad Rudolph schrieb:
Wieso empfiehlt sich ein String nicht? Bezweifle ich doch.
An der Stelle geht es nicht, weil ich das im ganzen Programm schon so realisiert hab....
Tja, da bleibt eben die Frage, ob Du diesen Designfehler in Deinem Programm weiterschleifen oder mal in Ordnung bringen willst.
Java-Coder* schrieb:
.... Mann, wieso kann es nicht einfach eine length für Arrays geben? :D...
Warum hat integer kein length() ? oder string kein sqrt() ? ...
Wenn Du für Deine Anforderungen den richtigen Typen wählst, klappt's auch mit dem Nachbarn...
Aber Dein (konkretes) Problem ist relativ einfach zu fixen: Dimension überall mitgeben.
(die restlichen Nachteile gegenüber vector wirst Du noch rausfinden)Java-Coder* schrieb:
...
Und ferner habe ich festgestellt, dass es kein StringBuffer Header gibt für C++.... Gibt es wenigstens eine ähnliche Header?...für "etwas Ähnliches" wäre hilfreich, zu wissen, wofür Du es benutzen möchtest. In Java habe ich StringBuffer im Wesentlichen wg. ihres Geschwindigkeitsvorteils (bzgl. append()) ggü. String kennengelernt - bei C++ unnötig, weil hier nicht die ganzen temporären Kopien erstellt werden (letztlich, weil string ein Objekt ist wie jedes andere auch)...
Gruß,
Simon2.
-
Simon2 schrieb:
std::string und std::vector haben beide length() und Anderes habe ich auch nicht behauptet.
Sorry, aber beide haben size(). length() hat nur string zusätzlich dazu.
-
LordJaxom schrieb:
Simon2 schrieb:
std::string und std::vector haben beide length() und Anderes habe ich auch nicht behauptet.
Sorry, aber beide haben size(). length() hat nur string zusätzlich dazu.
Hast natürlich Recht - sorry, vertippt (werd's korrigieren).
Danke,
Simon2.