Forum: PC-Programmierung C++ eine einfache Arrayklasse?


von mike (Gast)


Lesenswert?

Hallo,
wer möchte helfen...? ;-)

Ich möchte mir eine simple Klasse bauen,
(just for learning)
in der ein Array enthalten sind. Mein Ansatz:
1
class CArray{
2
  public:
3
    String Array[5];
4
    CArray DoHeader(String);
5
}; 
6
//Implementierung
7
CArray header;
8
9
header.DoHeader("ab,cd,ef");
10
11
CArray CArray::DoHeader(String string){
12
  CArray z;
13
  char *s[string.length()];
14
  string.toCharArray(*s,string.length());
15
  char *p = strtok(*s, ",");
16
  int i=0;
17
  while (p) {
18
    z.Array[i]=p;
19
    p = strtok(NULL, ",");
20
    i++;
21
  }
22
  return z;
23
}
24
25
Serial.print(header.Array[0); //ist leer

Wie wäre es richtig?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

mike schrieb:
> Wie wäre es richtig?

Beschreib doch einfach, was Du erreichen willst.

von CPlusPlus (Gast)


Lesenswert?

Zum C++ - Lernen würd ich erstmal mit der reinen C++ - std-Bib anfangen.
d.H. "std::string" statt "String", woauchimmer du dein "String" her 
hast.
1
#include <string>
2
#include <sstream>
3
#include <iostream>
4
#include <algorithm>
5
6
class FiveStrings {
7
public:
8
  FiveStrings(const std::string & input); // das war deine "DoHeader"-Memberfuntkion. Macht als Konstruktor mehr Sinn.
9
10
  void output(ostream & target); // zum wieder ausgeben
11
12
protected:
13
 std::string array[5];
14
};
15
16
FiveStrings::FiveStrings(const std::string & input) {
17
  std::istringstream iss(input);
18
  unsigned int i=0;
19
  while (i<5 && std::getline(iss, array[i],',')) i++;
20
}
21
22
void FiveStrings::output(ostream & target) {
23
  std::copy(array, array+5, std::ostream_iterator<std::string>(target, "\t"));
24
}
25
26
void main() {
27
  FiveStrings test("ab,cd,ef");
28
  test.output(std::cout);
29
}

Syntaxfehler berichtigen, und könnte schon das gewünschte tun... bis auf 
die überflüssigen TABs in der Ausgabe.
Besser: Statt fixem 5-Elemente-Array einen std::vector<std::string> 
verwenden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.