Einleitung:
Ich hatte früher immer Probleme, weil einige Funktionen nur "char's" Zeichen annehmen und nicht die Komfortable Klasse string. Ich hoffe dieser Workshop kann euch einbisschen damit helfen. Hiet wird C++ verwendet. Der Compiler ist eigentlich egal, aber ich empfehle immer den Freeware Borland BCC 5.5 Compiler von http://www.borland.com. Dieser Workshop ist für Anfänger gedacht.
Rechts oder Links rauskopieren:
Wenn man z.B. eine Zeichenkette "Hallo Welt" hat und nur das "Welt" rauskopieren will, dann kann man ein neuen "char" Pointer deklarieren und jedes einzellne in einer For Schleife einsetzten. Oder man schreibt gleich eine komplette Funktion dazu. Als Parameter will man dann den Eingabe "char" haben und dazu noch den Ausgabe "char". Dazu noch die Zeichenlänge wieviel der zu rauskopierende "char" haben soll, also in unseren Falle, aus "Hallo Welt", hat "Welt" genau 4 Zeichen.
void Rightcopy(char *input, char *output, int pos)
{
int index = 0;
int len = strlen(input);
for(int i = pos; i < len; i++)
{
output[index] = input[i];
index++;
}
output[index] = 0;
}
Am ende muss das Null Zeichen kommen. Das beendet die ganze Zeichenkette. Wenn man das rechte Ende abschneiden will, also in unseren Falle möchten wird dann aus "Hallo Welt" nur noch "Hallo", also mit der Länge von 5 Zeichen, wenn ich mich nicht verzählt habe ;-), dann machen wir diese Funktion. Sie ist der ersten ähnlich.
void Leftcopy(char *input, char *output, int pos)
{
int index = 0;
for(int i = 0; i < pos; i++)
{
output[index] = input[i];
index++;
}
output[index] = 0;
}
Mitte rauskopieren:
Jetzt nehmen wir als Beispiel mal die Zeichenkette "Leb wohl grausame Welt" und wir wollen nur das Wort "grausame" mit 8 Zeichen da rausschneiden, dann braucht unsere Funktion noch ein neuen Parameter. Von wo, bis wo. Die Funktion könnte wie folgt aussehen:
void Middlecopy(char *input, char *output, int start_pos, int stop_pos)
{
int index = 0;
for(int i = start_pos; i < stop_pos; i++)
{
output[index] = input[i];
index++;
}
output[index] = 0;
}
Sie baut auf den gleichen Prinzip, wie die ersten beiden auf, nur dass da eine Begrenzung liegt.
Zeichenkette finden:
Es ist immer nützlich, wenn man ein Längeren Textblock hat und da eine bestimmte Zeichenkette raussuchen will, eine Funktion dazu zu haben, die gleich die Position ab wann die Zeichenkette anfängt zurückgibt. Nehmen wir mal ein Beispiel. Du hast die Zeichenkette "Heute gehen wir in das Kino. Ich hoffe du kannst mit." Wir wissen nicht, wo die Zeichen "das Kino" anfangen, weil wir sie mit Middlecopy ausschneiden wollen. Das Prinzip ist, dass man wieder in einer For Schleife jedes einzellne Zeichen raussucht. Hier ist die Beispiel Funktion. Der Parameter body ist der ganze Text, und search die zu Suchende Zeichenkette.
int findstr(char *body, char *search)
{
int len = strlen(body);
int len2 = strlen(search);
for(int i = 0; i < len; i++)
{
if(body[i] == search[0])
{
bool ich = true;
for(int z = 0; z < len2; z++)
{
if(body[i+z] == search[z])
{
}
else
{
ich = false;
}
}
if(ich == true)
{
return i;
}
}
}
return -1;
}
Wenn wir jetzt in unseren Text schauen, also "Heute gehen wir in das Kino. Ich hoffe du kannst mit." und nach der Zeichenkette "das Kino" suchen und die Funktion aufrufen, erhalten wir die Position der Zeichenkette, also in unseren Falle 19, weil von da an die Zeichenkette "das Kino" beginnt.
Ende:
Das war noch nicht alles, was man mit den char Zeichenketten alles machen kann. Du kannst ja mal selbst Funktionen dazu schreiben, die z.B. Alle Leerzeichen entfernen, so als Übung. Man benutzt diese "char's" in vielen Funktionen und
deshalb ist es immer komfortabel, wenn man dazu ein paar Funktionen hat. Ich hoffe, dass ich euch damit helfen konnte.