AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String Manipulation

Ein Thema von PascalProgram · begonnen am 5. Jan 2023 · letzter Beitrag vom 5. Jan 2023
Antwort Antwort
PascalProgram

Registriert seit: 5. Jan 2023
5 Beiträge
 
#1

String Manipulation

  Alt 5. Jan 2023, 00:48
Delphi-Version: 5
Hallo, ich hätte einige Fragen zur String Manipulation. Ich wollte wissen, wieso man bei Strings bspw. +1 benutzt oder -1. Was bedeutet das? Wie wirkt sich diese +1 oder -1 aus?

Zudem wollte ich wissen, wieso ich in einer For Schleife keine While Schleife mit rein integrieren kann, um somit ein Ergebniswert für jeden Durchgang <> Leerzeichen speichern kann.


Bsp: var i:byte; s:string; Anzahl:byte;


For i:= 1 to length(s) do begin
While s[i] <> ‘ ‘
Inc (Zähler);
anzahl:= Zähler;
end;

Ich bedanke mich im Voraus für die Hilfe .
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: String Manipulation

  Alt 5. Jan 2023, 07:28
Hallo, ich hätte einige Fragen zur String Manipulation. Ich wollte wissen, wieso man bei Strings bspw. +1 benutzt oder -1. Was bedeutet das? Wie wirkt sich diese +1 oder -1 aus?
Ich verstehe die Frage nicht. Auch in deinem Beispiel ist nichts mit +/-1.
Zudem wollte ich wissen, wieso ich in einer For Schleife keine While Schleife mit rein integrieren kann, um somit ein Ergebniswert für jeden Durchgang <> Leerzeichen speichern kann.
Natürlich geht das. Der Compiler wird dir sicher eine Fehlermeldung gegeben haben. Diese einfach genau lesen, dann kommt man meistens schon weiter. Ansonsten bei der nächsten Frage die Fehlermeldung mitliefern. Das hilft auch uns, den Fehler schneller zu erkennen.

Trotzdem schonmal folgende Infos:
While-Schleifen in Delphi müssen so aussehen: While <Bedingung> do
Das "do" fehlt bei dir.
Ob in Delphi 5 schon Umlaute bei den Variablen erlaubt sind, weiß ich nicht. Ich würde aber in jedem Fall davon abraten, Umlaute zu verwenden.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: String Manipulation

  Alt 5. Jan 2023, 09:00
Wenn man mit Strings so arbeitet, wie man es in Delphi normalerweise macht, dann ist ein +1 oder -1 unsinnig. Wo das zum Einsatz kommen kann, ist bei der PChar-Variante, bei der ein String (vereinfacht gesagt) als Zeiger auf einen Punkt im Speicher verwaltet wird. Diesen Zeiger kann man erhöhen oder verringern - jedoch sollte man hier nicht mit "+1" arbeiten, um das nächste Zeichen zu bekommen, sondern mit SizeOf(Char) - weil ein Zeichen in der Regel zwei Bytes groß ist.
Aber diese Form der Stringverarbeitung braucht man bei Delphi normalerweise nicht.

Zu deinem Code: Der funktioniert vorne und hinten nicht. Deine While-Schleife ist im Zweifel auch eine Endlosschleife. Ich vermute, dass du hier "if" meinst. Falls du die Anzahl der Zeichen in dem String zählen willst, die keine Leerzeichen sind, dann würde ich das so machen:

Delphi-Quellcode:
Anzahl := 0;
For i := 1 to length(s) do begin
  if s[i] <> ' then
    Inc(Anzahl);
end;
Edit: Kann es sein, dass du C-Code vor dir hast, den du nach Delphi umschreiben willst? Das sieht ein wenig danach aus ...
The angels have the phone box.

Geändert von Gausi ( 5. Jan 2023 um 09:04 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.824 Beiträge
 
Delphi 12 Athens
 
#4

AW: String Manipulation

  Alt 5. Jan 2023, 09:22
Mir stellt sich generell die Frage was mit dem Konstrukt erreicht werden soll.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Klapauzius

Registriert seit: 8. Feb 2018
Ort: Region Bern (Schweiz)
71 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: String Manipulation

  Alt 5. Jan 2023, 09:38
Ich denke das ist ein Problem wie Delphi in der Vergangenheit mit Strings umgegangen ist, da waren doch plötzlich Strings 0 basiert unter den mobileplatforms, was plötzlich wieder geändert wurde. Nun verwenden wieder alle Delphi Compiler standardmässig 1 basierte Strings. D.h. mal musste man bei 1 beginnen mit iterieren mal bei 0.

https://docwiki.embarcadero.com/RADS...rings_(Delphi)

Allgemein gültig war glaub ich aber für alle Delphiversionen:

Delphi-Quellcode:
Anzahl:= 0;
for i:= low(s) to high(s) do
begin
 if s[i] <> ' then
    Inc(Anzahl);
end;
  showmessage(inttostr(Anzahl));
Albert
  Mit Zitat antworten Zitat
PascalProgram

Registriert seit: 5. Jan 2023
5 Beiträge
 
#6

AW: String Manipulation

  Alt 5. Jan 2023, 12:06
Wenn man mit Strings so arbeitet, wie man es in Delphi normalerweise macht, dann ist ein +1 oder -1 unsinnig. Wo das zum Einsatz kommen kann, ist bei der PChar-Variante, bei der ein String (vereinfacht gesagt) als Zeiger auf einen Punkt im Speicher verwaltet wird. Diesen Zeiger kann man erhöhen oder verringern - jedoch sollte man hier nicht mit "+1" arbeiten, um das nächste Zeichen zu bekommen, sondern mit SizeOf(Char) - weil ein Zeichen in der Regel zwei Bytes groß ist.
Aber diese Form der Stringverarbeitung braucht man bei Delphi normalerweise nicht.

Zu deinem Code: Der funktioniert vorne und hinten nicht. Deine While-Schleife ist im Zweifel auch eine Endlosschleife. Ich vermute, dass du hier "if" meinst. Falls du die Anzahl der Zeichen in dem String zählen willst, die keine Leerzeichen sind, dann würde ich das so machen:

Delphi-Quellcode:
Anzahl := 0;
For i := 1 to length(s) do begin
  if s[i] <> ' then
    Inc(Anzahl);
end;
Edit: Kann es sein, dass du C-Code vor dir hast, den du nach Delphi umschreiben willst? Das sieht ein wenig danach aus ...
Ich wollte in einem Satz die Länge der Wörter durchgehen und wenn ein Wort z.B länger als 5 Zeichen ist dieses Wort in der String Variable S löschen.

Ich habe es geschafft ein Programm zu schreiben, das alle Buchstaben zählt und ein Programm, welches alle Wörter zählt. Aber ich weiß nicht wie ich die Schleife gestalten soll, damit nach jedem Wort kontrolliert wird, ob das Wort im Satz >=5 ist und das Wort gelöscht werden soll, wenn es länger als 5 Zeichen ist. Das war mein Ziel mit der While Schleife, den Ablauf so zu gestalten, dass nach einem Leerzeichen, kontrolliert wird ob Wort >=5.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

AW: String Manipulation

  Alt 5. Jan 2023, 21:02
Eine schöne Aufgabe für Delphi-Referenz durchsuchenTRegEx.Replace.



Du weißt wann der letzte Trenner war (bzw. kannst die das merken), also kannst du vom nächsten Trenner ausrechnen wie lang es ist.

Oder man kann vorher auch einfach alle Wörter splitten, geht dann jedes Wort einzeln durch und setzt es am Ende wieder zusammen.



Und wer eine eine FOR-Schleife vorwärts durchläuft, dabei in den durchlaufenen Daten etwas löscht, hat es nicht anders verdient, wenn ihm das am Ende um die Ohren fliegt.
(Löschen rückwärts, oder nach "einem" Löschen die Schleife abbrechen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz