String Handling - Was Strings sind und wie man mit ihnen arbeitet

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich dachte mir, ich schreib mal ein kleines Tutorial (eigentlich eine Erklärung bzw. Aufklärung) zum Thema Strings und wie man am besten und einfachsten mit ihnen arbeitet.
    Das Tutorial ist anfängerfreundlich geschrieben, also bitte nicht gleich weinen, wenn ihr eine Zeile findet, die man sich hätte sparen können.


    Was sind Strings?


    Strings sind Arrays und Arrays sind prinzipiell Strings.
    In Pawn werden die Buchstaben einzeln gespeichert und wie Zahlen nach dem ACII-Code behandelt.
    Sie haben immer einen Null-Terminator am Ende, der 4 Bytes an Größe benötigt, was einer Zelle entspricht.



    Beispiel:



    new string[1];


    format(string, sizeof(string), "A");


    Würde nicht funktionieren, da der String zu klein für den Null-Terminator ist.
    Richtig wäre "new string[2];".


    Einen String deklarieren


    Ein String wird wie jede andere Variable mit dem Syntax-Word "new" eingeleitet.
    Dann folgt der Name und anschließen die Größe.
    <Syntaxwort>new <Name>hanspeter<Größe>[128];


    Beispiel:



    new hanspeter[128];


    Einem String einen Wert zuweisen


    Die einfachste Form, einen String einen statischen Wert zuzuweisen, ist per "=" Operator.


    Beispiel:



    new string[5] = "Test"; // Größe besteht aus [Buchstabenanzahl] + [Null-Terminator], also 4 + 1;


    Eine andere Möglichkeit wäre, den String mittels der format-Funktion einen Wert zuzuweisen.


    Beispiel:



    new string[5];


    format(string, sizeof(string), "Test");


    Außerdem ist es auch so möglich:



    new string1[5] = {'T', 'e', 's', 't'};
    new string2[5];


    string2[0] = 'T';
    string2[1] = 'e';
    string2[2] = 's';
    string2[3] = 't';


    Die String-Funktionen und wie man sie verwendet


    Nach dem wir jetzt unseren String initialisiert haben, möchten wir eventuell auch damit arbeiten.
    Dazu gibt ist einige String-Funktionen, die meist mit dem Prefix "str" beginnen.
    Im Anhang findet ihr alle aufgelistet.


    Zwei Strings vergleichen - strcmp


    "strcmp" steht für "String-Compare" was zu deutsch für das Vergleichen von Strings heißt.
    Mit dieser Funktion kann man überprüfen, ob zwei Strings den selben Inhalt haben.
    Die Funktion gibt 0 zurück, wenn die Strings gleich sind.


    Man übergibt der Funktion folgende Parameter:

    • String 1
    • String 2
    • [Ignore Case = false] - d.h. wenn dieser Parameter auf true gesetzt wird, ist es egal ob "TeSt" oder "test" - die Variablen wären gleich.
    • [Length = 0] - Länge der zu vergleichenden Chars. Bei einer Länge von 2 und den Strings "test" würde nur "te" mit "te" verglichen werden.


    Beispiel:



    new string1[5], string2[5];


    string1 = "Test";
    string2 = "Test";


    if (strcmp(string1, string2, false, 4) == 0)
    {
    // Die Strings sind identisch
    }


    Etwas in einem String finden - strfind


    Mit der Funktion strfind kann man die Position einer bestimmten Zeichenkette in einem String feststellen.
    Die Funktion gibt die Start-Position der gesuchten Zeichenkette in dem String zurück. Falls sie nicht gefunden wurde, wird -1 zurück gegeben.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String in dem die Zeichenkette gesucht werden soll.
    • String 2 - Der String, nach dem im String gesucht werden soll.
    • [Ignore Case = false] - Wenn der Wert auf true gesetzt wird, ist es egal ob man nach "TeSt" oder "test" sucht.
    • [Position = 0] - Start-Position ab der gesucht werden soll.


    Beispiel:



    new string[19];


    string = "Ich bin ein Satz.";


    new position = strfind(string, "Satz", false, 0); // Gibt 12 zurück, da sich das "S" von "Satz" der 12. Buchstabe des Strings ist.


    Einen Teil aus einem String löschen - strdel


    Um einen Teil aus einem String zu löschen, können wir "strdel" verwenden.
    Die Funktion gibt keinen Wert zurück, sondern ändert direkt den String, den wir der Funktion übergeben.


    Man übergibt der Funktion folgende Parameter:

    • String - Der String, aus dem etwas entfernt wird.
    • Start - Die Position, an der das Löschen begonnen werden soll.
    • End - Die Position, an der das Löschen beendet werden soll.


    Beispiel:



    new string[19];


    string = "Ich bin ein Satz.";


    strdel(string, 0, 4); // Der String "string" besteht nun aus der Zeichenkette "bin ein Satz".


    Eine Zeichenkette in einen String einfügen - strins


    Mit "strins" können wir eine Zeichenkette an einer bestimmten Position in einen String einfügen.
    Die Funktion gibt wie "strdel" keinen Wert zurück, sondern ändert den übergebenen String.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String, in den eine Zeichenkette eingefügt werden soll.
    • String 2 - Der String, der in den String eingefügt werden soll.
    • Position - Die Position, an der der String eingefügt werden soll.
    • [Max. Length = Size of String 2] - Die Anzahl der Chars von String 2, die maximal eingefügt werden.


    Beispiel:



    new string1[19];
    new string2[6];

    string1 = "Ich bin ein ";
    string2 = "Text.";


    strins(string1, string2, 12, sizeof(string2)); // Der String "string1" besteht nun aus "Ich bin ein Text."


    Die Größe eines String auslesen - strlen


    Mit "strlen" können wir die Anzahl der Zeichen in einem String auslesen (Ohne Null-Terminator).
    Die Funktion gibt die Anzahl der Zeichen des Strings zurück.


    Man übergibt ihr folgenden Parameter:

    • String - Der String, von der die Länge ausgelesen werden soll.


    Beispiel:


    new string[5];


    string = "Test";


    new length = strlen(string); // "length" hat nun den Wert 4.


    Etwas aus einem String auslesen - strmid


    Mit "strmid" können wir eine Zeichenkette aus einem String an einer bestimmten Position auslesen.
    Die Funktion gibt keinen Wert zurück, sondern ändert den übergebenen String.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String, in dem die gefundene Zeichenkette gespeichert werden soll.
    • String 2 - Der String, in dem eine Zeichenkette ausgelesen werden soll.
    • Start - Position, an der angefangen werden soll, auszulesen.
    • End - Position, an der aufgehört werden soll, auszulesen.
    • [Max. Length = Size of String 1] - Die maximale Anzahl an Zeichen, die ausgelesen werden sollen.


    Beispiel:



    new string[6];

    strmid(string, "Das ist ein Test!", 12, 17); // Der String "string" enthält nun "Test!".


    Einen String zu einer Zahl konvertieren - strval


    Mit der Funktion "strval" können wir einen String zu einer Zahl konvertieren.
    Die Funktion gibt den String der übergeben wird als Zahl zurück.


    Man übergibt der Funktion folgenden Parameter:

    • String - Der String, der zu einer Zahl konvertiert werden soll.


    Beispiel:



    new string[2];


    string = "5";


    new number = strval(string); // "number" hat nun den Wert 5.


    Ich habe nun die gängigsten Funktionen erklärt, es gibt noch ein paar mehr, auf die ich nicht eingegangen bin.
    Die findet ihr ebenfalls im Anhang.


    Die Funktionen lassen sich jetzt prima kombinieren, bspw. mit "strfind" und "strdel" um bspw. eine Funktion zu schreiben, mit der man in einem String eine Zeichenkette durch eine andere ersetzen kann.


    Anhang


    Hier findet ihr noch alle String-Funktionen:

    Verbesserungsvorschläge werden gerne angenommen - Feedback ist natürlich gerne gesehen.


    Lg, namespace.


    Edit 1: Verbesserungen (siehe: [ SCRIPTING ] String Handling - Was Strings sind und wie man mit ihnen arbeitet).
    Edit 2: Rechtschreibfehler ausgebessert.
    Edit 3: BlackAce's Erklärung eingebunden.
    Edit 4: Rechtschreibfehler ausgebessert.
    Edit 5: Link repariert.


    #Brotfischbaron


    In schā'a llāh

    6 Mal editiert, zuletzt von namespace ()

  • Strings sind Variablen die aus mehreren Buchstaben, also einer Zeichenfolge, bestehen.
    Sie haben immer einen Null-Terminator am Ende, der 1 Byte an Größe benötigt.


    Dies ist nicht ganz richtig,
    ich wäre dir sehr verbunden, wenn du dir mal meine Erklärung zu den "strings" anschauen würdest
    Diese findest du hier


    Dazu stimmt deine Byte zahl nicht.
    Ein typischer "string" braucht pro cell 4 Bytes und nicht einen, heißt auch dein \0 special character belegt 4 Bytes.


    Würde nicht funktionieren, da der String zu klein ist.
    Richtig wäre "new string[2];".


    Schade das du hier nicht erklärst warum es nicht funktioniert.
    Das werde ich jetzt nicht übernehmen, da ich es bereits in meiner bereits erwähnten Erklärung erwähnt habe.


    Ansonsten ganz nettes Tutorial ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Du hast leider immer noch nicht alles ausgebessert ^^


    Ich glaube auch nicht, das sich viele die Mühe machen werden sich extra nochmal meine beiden Beiträge durchzulesen.


    Bitte "vermisch" es doch mit deinem Tutorial

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen