| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| pzktupel 
 
  
 Anmeldungsdatum: 07.07.2020
 Beiträge: 85
 
 
 | 
			
				|  Verfasst am: 31.08.2020, 15:07    Titel: Spiegeln von Zeichen im String |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 31.08.2020, 18:16    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| dreael Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 2530
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 31.08.2020, 19:46    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| hhr 
 
 
 Anmeldungsdatum: 15.07.2020
 Beiträge: 116
 
 
 | 
			
				|  Verfasst am: 31.08.2020, 20:28    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 31.08.2020, 21:37    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| pzktupel 
 
  
 Anmeldungsdatum: 07.07.2020
 Beiträge: 85
 
 
 | 
			
				|  Verfasst am: 01.09.2020, 05:27    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		|  |