Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Spiegeln von Zeichen im String

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 81

BeitragVerfasst am: 31.08.2020, 15:07    Titel: Spiegeln von Zeichen im String Antworten mit Zitat

Hallo,
gibt es eigentlich einen Befehl, der die Zeichen in einem String spiegelt ?

Aus "Kette" wird "etteK" ,ohne den String mit MID zu zerpflücken.

Danke !
_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 31.08.2020, 18:16    Titel: Antworten mit Zitat

In Omikron Basic gab es den Befehl MIRROR$; aber in FreeBASIC gibt es keinen solchen Befehl. Ich würde da aber nicht auf MID setzten, sondern auf direkte Stringindizierung (sollte wegen fehlender Sicherheitsprüfung schneller gehen). Ich habe mal zwei Ansätze dazu:
Code:
dim as string original = "Kette", spiegelung = original
dim as integer laenge = len(original)

' 1. Möglichkeit
for i as integer = 0 to laenge-1
  spiegelung[i] = original[laenge-1-i]
next
print spiegelung

' 2. Möglichkeit
for i as integer = 0 to laenge\2-1
  swap original[i], original[laenge-1-i]
next
print original

(Im ersten Beispiel muss für 'spiegelung' unbedingt erst ein ausreichend langer String reserviert werden, ansonsten gibt es fehlerhafte Speicherzugriffe.)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 31.08.2020, 19:46    Titel: Antworten mit Zitat

Das Ganze würde ich sinnvollerweise noch in eine Function packen, womit der gewünschte Befehl erschaffen wird:
Code:
' Strings umkehren

' Hier der "Befehl"
Function OmicronMirror(s As String)As String
   Dim tmp As String, i As Integer
   
   tmp = ""
   For i = Len(s) To 1 Step -1
      tmp += Mid(s, i, 1)
   Next
   OmicronMirror = tmp
End Function

' Für etwas JUnit-ähnliches geeignet: Doppelter Aufruf muss wieder das Ursprüngliche geben
Assert(OmicronMirror(OmicronMirror("Dies ist ein Test.")) = "Dies ist ein Test.")

' Beispiele
ScreenRes 640, 480
Width 80, 30
Print OmicronMirror("Kette")
Print OmicronMirror("https://forum.qbasic.at/viewtopic.php?t=9040")
Sleep

Für die Profis etwas: Unit-Testing implementieren (müsste ich bei FbEdit auch erst herausfinden, wie man dies aktiviert).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 84

BeitragVerfasst am: 31.08.2020, 20:28    Titel: Antworten mit Zitat

Es gibt aber auch noch...
Code:

#include "crt.bi" '"crt\string.bi"
Dim As String s,r
s="Kette"
r=s
_strrev(r)
Print s
print r
Sleep

Ist dagegen etwas einzuwenden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 31.08.2020, 21:37    Titel: Antworten mit Zitat

Wobei mich bei dreaels Funktion stört, dass der String ständig erweitert wird - das bedeutet, dass beim Zusammensetzen des Öfteren ein neuer Speicherbereich reserviert werden muss.

Nach C-Funktionen kann man natürlich auch immer Ausschau halten. Wir haben in der Referenz eine Übersicht, scheint aber unvollständig zu sein.
https://www.freebasic-portal.de/befehlsreferenz/funktionen-der-c-standard-library-622.html
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 81

BeitragVerfasst am: 01.09.2020, 05:27    Titel: Antworten mit Zitat

Danke für die Antworten.

Das Spiegeln war eigentlich von temporärer Natur. Ich hatte dies mit MID geregelt, dachte aber es gäbe ein Befehl.

Es war ein mathematisches Problem, das besagte, finde das kleinste Bsp. , dass 13 aufeinanderfolgende Primzahlen auch Primzahlen in der Spiegelversion (emirp) sind. Es gibt nur eines mit 12 unterhalb 10 Mrd.

Ich presste dann alle Primzahlen bis 100 Mrd auf 12.5 GB RAM und wertete
auch dies aus. Es gab keinen mehr mit 12, nur paar mit 11.

Darüber hinaus werde ich dies nicht verfolgen.

Grüße gehen raus !

P.S. Ich nachhinein lösste ich es wie dreael, wobei U die Primzahl ist,

Code:
S=STR(U):L=LEN(S):T=""
FOR i=L TO 1 STEP -1
T=T+MID(S,i,1)
NEXT i
..
P=VALULNG(T)

_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz