Arduino IDE String Cheat-Sheet

Wer kein Programmierexperte ist, wird Mühe haben, in C++ den Zeichenstrings Herr zu werden. Spätestens wenn man eine API ansteuern will und Zeichen aus verschiedensten Orten im Programm zusammensetzen will, dann bricht das Chaos aus und bis die IDE keine Fehlermeldungen mehr meldet, können Stunden vor dem Bildschirm und der Tastatur verloren vergehen. Hier ein Versuch, eine Übersicht darüber zu erstellen.

Arten von Strings

Folgende nicht abschliessende Möglichkeiten hast Du, um Strings in einer Variable zu speichern:

String dasWort1 = "Ich bin ein Stringobjekt";
char dasWort2[] = "Ich bin auch eine Zeichenkette";
char dasWort3[31] = "Ich bin auch eine Zeichenkette";
char dasWort4[5] = "Wort";
char dasWort5[5] = {'W', 'o', 'r', 't'};
char dasWort5[5] = {'W', 'o', 'r', 't', ''};
char dasWort6[10] = "Wort";
char dasWort7[] = "Mehrzeilige Eingabe"
                  "eines Satzes "
                  "grosser Länge";
char* dasWort8 = "Ich bin eine Zeichenkette";
char* dasWort9[] = {"Ich ", "bin ", "eine ", "Zeichenkette"};
char dasWort10 = 'W';

Erklärung der einzelnen Varianten

String – dasWort1

Hierbei handelt es sich nicht um ein Variablentyp sondern um eine komplette Klasse. Das heisst, dasWort1 hat auch Methoden und Funktionen die ausgeführt werden können. Das ist natürlich praktisch, verbraucht aber auch viele mehr Ressourcen als eine Variable vom Typ char. 

char – dasWort2-7 und 10

Klassischer String-Typ. Zuerst wird der Typ “char” festgelegt, danach folgt der Name der Variable. Der Char-Typ ist eigentlich ein Array von einzelnen Zeichen, die intern als Zahl (ASCII-Zeichen) gespeichert werden. Ein Array wird über die eckigen Klammern definiert. Es kann eine feste (dasWort3-6) oder eine undefinierte Länge haben (dasWort2+7). Es kann auch nur ein Element enthalten, dann fallen die eckigen Klammern weg (siehe dasWort10). Wird die Länge definiert, ist es wichtig, dass diese immer eines zu Gross gewählt wird, da bei C++ das Ende der Zeichenkette mit einer “” abgeschlossen werden muss, damit es erkannt wird. Dies geschieht automatisch, kann aber natürlich auch manuell hinzugefügt werden, wie dies bei dasWort5 der Fall ist, wobei dann die Längenangabe exakt ausfällt.

char* – dasWort8-9

Hierbei handelt es sich ebenfalls um einen Char-Typ, jedoch als In Pointer-Form. Enthält es nur ein Element, können die eckigen Klammern weggelassen werden (dasWort8). Was genau dabei passiert ist nicht ganz einfach zu erklären. Hier hat jemand ein guter Versuch gemacht, das ganze zu erklären:

https://forum.arduino.cc/index.php?topic=44034.msg318990#msg318990

Strings umwandeln

Soweit einfach. Die wahre Schwierigkeit kommt aber erst, wenn man nun versucht, zwei Strings miteinander zu Verknüpfen. Du willst z.B. einen Pfad für eine API-Abfrage generieren, der aus verschiedenen Variablen-Typen besteht, also char, String und Integer. In dem Fall musst Du zuerst eine Typenumwandlung vornehmen.

String() nach char

String str = "Das ist ein String"; 

// Länge des Strings; +1 wegen der "" (siehe dasWort5)
int str_len = str.length() + 1;

// Neue Variable die den String aufnimmt 
char char_array[str_len];

// String aus str in das neue char-Array kopieren 
str.toCharArray(char_array, str_len);

char nach String()

char char_array[] = "Das ist ein String";
String str = String(char_array); // oder kürzer geschrieben
String str(char_array);

Strings verknüpfen

Strings können auf verschiedene weisen verknüpft werden. Bei einer Variable vom Typ String ist es relativ einfach. Mit dem “+” können Strings und auch Integer beliebig verknüpft werden:

String str1 = "Das ist";
String str2 = "ein String";
String str3;
str3 = str1 + ' ' + str2 + " mit ca. " + 40 + " Zeichen";

chars Verknüpfen

Wenn Du chars verknüpfen willst, machst Du das am besten in einem String-Objekt.

String str = "";
char char_array1[] = "Das ist";
char char_array2[] = "eine Zeichenkette";
String str1(char_array1);
String str2(char_array2);
str = str1 + ' ' + str2;

Weiterführende Tutorials

https://startingelectronics.org/software/arduino/learn-to-program-course/18-strings/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert