<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://zumunterrichten.idea-sketch.com/index.php?action=history&amp;feed=atom&amp;title=Lazarus%2FZeichen_%28Char%29_und_Zeichenkette_%28String%29</id>
	<title>Lazarus/Zeichen (Char) und Zeichenkette (String) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://zumunterrichten.idea-sketch.com/index.php?action=history&amp;feed=atom&amp;title=Lazarus%2FZeichen_%28Char%29_und_Zeichenkette_%28String%29"/>
	<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lazarus/Zeichen_(Char)_und_Zeichenkette_(String)&amp;action=history"/>
	<updated>2026-05-08T18:49:07Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in ZUM-Unterrichten</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lazarus/Zeichen_(Char)_und_Zeichenkette_(String)&amp;diff=96906&amp;oldid=prev</id>
		<title>Matthias Scharwies: formatiert</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lazarus/Zeichen_(Char)_und_Zeichenkette_(String)&amp;diff=96906&amp;oldid=prev"/>
		<updated>2019-08-10T06:33:41Z</updated>

		<summary type="html">&lt;p&gt;formatiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Strings als Arrays von Zeichen==&lt;br /&gt;
Ganz am Anfang unseres Ganges durch Lazarus haben wir die Beschriftung eines Buttons geändert. Beschriftungen sind Zeichenketten, die aus keinem, einem oder mehreren Zeichen bestehen. Variablen vom Typ &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt; können in Lazarus bis zu 255 Zeichen beinhalten.&lt;br /&gt;
&lt;br /&gt;
Eine Variable s vom Typ String wird mit &lt;br /&gt;
&amp;lt;source lang=&amp;#039;pascal&amp;#039;&amp;gt; &lt;br /&gt;
var s : string; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
deklariert. Einer String-Variable kann man, wie wir gesehen haben, einfach einen Wert zuweisen, indem man die Zeichenkette durch einfache Hochkommas eingerahmt auf die rechte Seite des Zuweisungsoperators &amp;lt;tt&amp;gt;:=&amp;lt;/tt&amp;gt; schreibt, also etwa &lt;br /&gt;
&amp;lt;source lang=&amp;#039;pascal&amp;#039;&amp;gt; &lt;br /&gt;
s:=&amp;#039;Die Antwort ist 42.&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man sieht: Neben den eigentlichen Buchstaben können auch Ziffern, Sonderzeichen und Leerzeichen Teil einer solchen Zeichenkette sein. Auf diese einzelnen Zeichen kann man zugreifen ähnlich wie auf die einzelnen Elemente eines Arrays: mit eckigen Klammern, innerhalb deren die Nummer des Zeichens steht:  Im Beispiel hätte also &amp;lt;tt&amp;gt;s[1]&amp;lt;/tt&amp;gt; den Wert &amp;quot;D&amp;quot;, &amp;lt;tt&amp;gt;s[2]&amp;lt;/tt&amp;gt; den Wert &amp;quot;i&amp;quot; usw. Die einzelnen Zeichen (engl.: character) haben formal den Typ &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Problematisch wird es, wenn man versucht auf ein Zeichen mit einer Nummer zuzugreifen, die größer ist als die Länge des Strings. Diese Länge spielt eine wichtige Rolle und kann mit der Funktion &amp;lt;tt&amp;gt;length(s)&amp;lt;/tt&amp;gt; ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm gibt also die Buchstaben des genannten Strings untereinander aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  line highlight=&amp;quot;35-37&amp;quot; lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit lazio_testumgebung;&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,&lt;br /&gt;
  ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  { TForm1 }&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    Button1: TButton;&lt;br /&gt;
    Memo1: TMemo;&lt;br /&gt;
    procedure Button1Click(Sender: TObject);&lt;br /&gt;
  private&lt;br /&gt;
    { private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
  s : string;&lt;br /&gt;
  i : integer;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.lfm}&lt;br /&gt;
{ TForm1 }&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Clear;&lt;br /&gt;
  s:=&amp;#039;Die Antwort ist 42.&amp;#039;;&lt;br /&gt;
  for i:=1 to length(s)&lt;br /&gt;
  do Memo1.Lines.Add(s[i]);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Einfügen und Löschen von Teilstrings==&lt;br /&gt;
&lt;br /&gt;
{| class =&amp;quot;wikitable toptextcells&amp;quot; &lt;br /&gt;
! Befehl&lt;br /&gt;
! Wirkung&lt;br /&gt;
|- &lt;br /&gt;
| delete(stringvariable,position,anzahl) || Der Befehl löscht in der Stringvariable ab der &amp;lt;tt&amp;gt;position&amp;lt;/tt&amp;gt; eine bestimmte &amp;lt;tt&amp;gt;anzahl&amp;lt;/tt&amp;gt; von Zeichen.&lt;br /&gt;
|- &lt;br /&gt;
| insert(teilstring,stringvariable,position) || Der Befehl fügt in der Stringvariable ab der &amp;lt;tt&amp;gt;position&amp;lt;/tt&amp;gt; den &amp;lt;tt&amp;gt;teilstring&amp;lt;/tt&amp;gt; ein.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm löscht im String &amp;quot;Die Antwort ist 42.&amp;quot; den Teil &amp;quot;Antwort&amp;quot; und ersetzt ihn durch &amp;quot;Frage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source start=&amp;quot;32&amp;quot; line highlight=&amp;quot;4,5,7&amp;quot; lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Clear;&lt;br /&gt;
  s:=&amp;#039;Die Antwort ist 42.&amp;#039;;&lt;br /&gt;
  delete(s,5,7);&lt;br /&gt;
  Memo1.Lines.Add(s);&lt;br /&gt;
  insert(&amp;#039;Frage&amp;#039;,s,5);&lt;br /&gt;
  Memo1.Lines.Add(s);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Teilstrings suchen und herauskopieren==&lt;br /&gt;
&lt;br /&gt;
Um nur einen Teil eines Strings zu erhalten, könnte man alles andere weglöschen. Das wäre allerdings sehr umständlich. Die Funktion &amp;lt;tt&amp;gt;copy&amp;lt;/tt&amp;gt; ermöglicht das direkte Herauskopieren eines Teilstrings. Umgekehrt kann es von Interesse sein, zu wissen ob und an welcher Position in einem String ein bestimmter Teilstring vorkommt. Diese Information liefert die Funktion &amp;lt;tt&amp;gt;pos&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class =&amp;quot;wikitable toptextcells&amp;quot; &lt;br /&gt;
! Befehl&lt;br /&gt;
! Wirkung&lt;br /&gt;
|- &lt;br /&gt;
| copy(stringvariable, position, anzahl)|| Liefert den Teil der &amp;lt;tt&amp;gt;stringvariable&amp;lt;/tt&amp;gt; zurück, der ab der &amp;lt;tt&amp;gt;position&amp;lt;/tt&amp;gt; steht und &amp;lt;tt&amp;gt;anzahl&amp;lt;/tt&amp;gt; Zeichen umfasst.&lt;br /&gt;
|- &lt;br /&gt;
| pos(teilstring, stringvariable) || Findet die erste Position, ab der der &amp;lt;tt&amp;gt;teilstring&amp;lt;/tt&amp;gt; im String vorkommt. Kommt der &amp;lt;tt&amp;gt;teilstring&amp;lt;/tt&amp;gt; gar nicht im String vor, liefert die Funktion den Wert 0.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie die beiden Funktionen verwendet werden können, um den Text zwischen zwei spitzen Klammern aus einem String herauszufinden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  line highlight=&amp;quot;35-37,39&amp;quot; lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit lazio_testumgebung;&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,&lt;br /&gt;
  ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  { TForm1 }&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    Button1: TButton;&lt;br /&gt;
    Memo1: TMemo;&lt;br /&gt;
    procedure Button1Click(Sender: TObject);&lt;br /&gt;
  private&lt;br /&gt;
    { private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
  s : string;&lt;br /&gt;
  auf,zu,anzahl : integer;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.lfm}&lt;br /&gt;
{ TForm1 }&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Clear;&lt;br /&gt;
  s:=&amp;#039;Das Wichtige steht in spitzen &amp;lt;Klammern&amp;gt;&amp;#039;;&lt;br /&gt;
  auf:=pos(&amp;#039;&amp;lt;&amp;#039;,s);&lt;br /&gt;
  zu:=pos(&amp;#039;&amp;gt;&amp;#039;,s);&lt;br /&gt;
  anzahl:=zu-auf-1;&lt;br /&gt;
  Memo1.Lines.Add(copy(s,auf+1,anzahl));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Groß und Kleinschreibung ==&lt;br /&gt;
&lt;br /&gt;
Zwei Funktionen liefern bei einem gegebenen String den String komplett in Großbuchstaben bzw. in Kleinbuchstaben zurück. &lt;br /&gt;
&lt;br /&gt;
Die Zeile &amp;lt;tt&amp;gt;s:=uppercase(&amp;#039;Das ist ein Text)&amp;lt;/tt&amp;gt; belegt die Variable &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; also mit dem Wert &amp;#039;DAS IST EIN  TEXT&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| class =&amp;quot;wikitable toptextcells&amp;quot; &lt;br /&gt;
! Befehl&lt;br /&gt;
! Wirkung&lt;br /&gt;
|- &lt;br /&gt;
| uppercase(stringvariable) || Liefert den String umgewandelt in Großbuchtstaben zurück.&lt;br /&gt;
|- &lt;br /&gt;
| lowercase(stringvariable) || Liefert den String umgewandelt in Kleinbuchtstaben zurück.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Einzelzeichen und ihre Ordnungszahl (ASCII-Code) ==&lt;br /&gt;
&lt;br /&gt;
Im Inneren des Computers sind natürlich auch die Zeichen von Strings letztlich als Zahlen abgelegt. Der so genannte &amp;#039;&amp;#039;American Standard Code for Information Interchange&amp;#039;&amp;#039; [http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange ASCII] ordnet den meisten gebräuchlichen Zeichen eine Zahl zwischen 0 und 255 zu.&lt;br /&gt;
&lt;br /&gt;
Um zwischen der ASCII-Ordnungszahl und den eigentlichen Zeichen hin und her übersetzen zu können, gibt es die beiden Funktionen &amp;lt;tt&amp;gt;ord&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;chr&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class =&amp;quot;wikitable toptextcells&amp;quot; &lt;br /&gt;
! Befehl&lt;br /&gt;
! Wirkung&lt;br /&gt;
|- &lt;br /&gt;
| ord(zeichen) || Liefert die Ordnungszahl des gegebenen Zeichens.&lt;br /&gt;
|- &lt;br /&gt;
| chr(zahl) || Liefert das Zeichen zur gegebenen Ordnungszahl.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm stellt die Ordnungszahlen der einzelnen Zeichen des gegebenen Strings dar, danach erzeugt es eine zufällige Folge von Großbuchstaben. Dazu muss man wissen, dass die Großbuchstaben (ohne Umlaute) ASCII-Codes zwischen 65 und 91 haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  line highlight=&amp;quot;37,42&amp;quot; lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit lazio_testumgebung;&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,&lt;br /&gt;
  ExtCtrls,LazIOStuff;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  { TForm1 }&lt;br /&gt;
&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    Button1: TButton;&lt;br /&gt;
    Memo1: TMemo;&lt;br /&gt;
    procedure Button1Click(Sender: TObject);&lt;br /&gt;
  private&lt;br /&gt;
    { private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
  s : string;&lt;br /&gt;
  i,zahl : integer;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.lfm}&lt;br /&gt;
{ TForm1 }&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Clear;&lt;br /&gt;
  s:=&amp;#039;Otto&amp;#039;;&lt;br /&gt;
  for i:=1 to length(s)&lt;br /&gt;
  do Memo1.Lines.Add(s[i]+&amp;#039; : &amp;#039;+IntToStr(ord(s[i]))); &lt;br /&gt;
&lt;br /&gt;
  for i:=1 to 20&lt;br /&gt;
  do begin&lt;br /&gt;
     zahl:=random(26)+65;&lt;br /&gt;
     Memo1.Lines.Add(chr(zahl));&lt;br /&gt;
     end;&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|1=&lt;br /&gt;
#Schreibe ein Programm, das in einem Text den ach so häufigen Buchstaben &amp;#039;e&amp;#039; jeweils durch ein &amp;#039;ä&amp;#039; ersetzt.&lt;br /&gt;
#Die verschiedenen Buchstaben kommen in den unterschiedlichen Sprachen statistisch unterschiedlich häufig vor. Schreibe ein Programm, das die unterschiedlichen Buchstaben eines Textes in einer Edit-Komponente zählt und die Zählwerte ausgibt. Groß- und Kleinschreibung sollen dabei nicht beachtet werden.&lt;br /&gt;
#Bei der so genannten Cäsar-Verschlüsselung wird jedem Buchstaben des Alphabets ein bestimmter anderer Buchstabe zugeordnet, und zwar z.B. derjenige, der 5 Stellen weiter im Alphabet steht. Aus A wird damit F, aus B wird G usw. Am Ende des Alphabets wird aus Y ein D, aus Z ein E. Schreibe ein Programm, das einen Text Cäsar-verschlüsselt.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Lazarus-Buch}}&lt;/div&gt;</summary>
		<author><name>Matthias Scharwies</name></author>
	</entry>
</feed>