Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

? Worteditor

Peter, der dritte / 13 Antworten / Baumansicht Nickles

Hallo, eine zweite Frage hätt\' ich da noch:
Gibt es ein Prog., daß mir Wörter editiert, und zwar in der Art, daß auf Grundlage eines vorgegebenen Namens Variationen bez. GROßER und kleiner Buchstaben herausgegeben werden?

Beispiel:
Folge AA aa Aa aA

bei Antwort benachrichtigen
Borlander Peter, der dritte „? Worteditor“
Optionen

Beschreib Dein Problem mal etwas genauer, evtl. gibt es eine einfachere Lösung...

Sonst hast Du recht schenell (2^lengt z.B. 65536 für 16 Zeichen - Speicherbedarf > 1MB) sehr viele Wortvarianten und einen hohen Speicherverbrauch...


CU borlander

bei Antwort benachrichtigen
Peter, der dritte Borlander „Beschreib Dein Problem mal etwas genauer, evtl. gibt es eine einfachere...“
Optionen

Also, ich suche ein Prog, daß mir bei folgende Arbeit abnimmt:
Als Vorgabe meinetwegen: google; daraus soll das Prog. nun Wörter editieren (-->In der Schule hieß es immer n-Fakultät, oder so), die alle Möglichkeiten der Groß- und Kleinschreibung berücksichtigen.
Die Reihe würde also anfangen mit google, Google, gOogle, goOgle,..., GOogle, gOOgle, ....

bei Antwort benachrichtigen
Borlander Peter, der dritte „Also, ich suche ein Prog, daß mir bei folgende Arbeit abnimmt: Als Vorgabe...“
Optionen

Das Problem kannst Du relativ einfach mit einer rekursiven Funktion lösen, hatte mal was ähnliches Programmiert - in Delphi (würde ich bei Bedarf hier posten)...

CU Borlander

bei Antwort benachrichtigen
UselessUser Borlander „Das Problem kannst Du relativ einfach mit einer rekursiven Funktion lösen,...“
Optionen

Hallo Borlander!

So ein Problem gibt mir ja wieder keine Ruhe, obwohl ich genug andere Sachen zu tun hätte ...

Also, ich habe eine Menge Hirnschmalz verwendet, für mich war es offen gestanden gar nicht so einfach, wie es aussah, zumindest wenn man nicht gleich eine mathematische Formel zur Hand hat oder Bill oder Linus heißt.

Strategie 1 - Zuerst habe ich die Großbuchstaben durch das Wort laufen lassen nach dem Muster (Ausgangswort "auto"):
auto, Auto, aUto, auTo, autO, AUto, AuTo, AutO, AUTo, AUtO, AuTO, aUTO, AUTO
Dabei blieben aber einige Kombinationen unberücksichtigt, bspw. aUTo!

Strategie 2 - Die Sortieralgorithmen arbeiten viel mit benachbarten Elementen, die ausgetauscht werden, so könnten immer benachbarte Kleinbuchstaben durch Großbuchstaben ersetzt werden (Ausgangswort "auto"):
auto, Auto, aUto, auTo, autO, AUto, AuTo, AutO, aUtO, auTO, AUTo, AUtO, AuTO, aUTO, AUTO
Dabei wird die Kombination von Großbuchstaben nicht berücksichtigt, die in der Mitte des Wortes nebeneinander liegen: aUTo!

Strategie 3 - Groß- und Kleinschreibung kann doch als Schalter zwischen zwei Möglichkeiten betrachtet werden. Also müsste das Ganze vielleicht im Binärsystem zu lösen zu sein und tatsächlich: Wenn ich die Anzahl der Kombinationsmöglichkeiten binär hochzähle und die Binärzahlen als 0/1- bzw. Klein-/Großbuchstabenraster verwende, komme ich auf alle Kombinationen. Allerdings ist die Zahl der möglichen Kombinationen nicht gleich n^2 !

Peter III. habe ich ein VBScript gepostet (siehe oben im Thread), dass nach diesem System funktioniert. Ist etwas umfangreicher geworden, weil eine Umwandlung von Dezimalzahlen in Binärzahlen erfolgen muss, die dann in einen String ausgegeben und als "Raster" ausgelesen werden.

Vielleicht gibt es elegantere Methoden, aber immerhin, es funzt!!! Für eine "einfache" rekursive Funktion habe ich keinen Ansatz gefunden.

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
Borlander UselessUser „Hallo Borlander! So ein Problem gibt mir ja wieder keine Ruhe, obwohl ich genug...“
Optionen
Vielleicht gibt es elegantere Methoden
Ja ;-)

Die Funktion muss nur folgendes machen: Aufgerufen wird sie mit 2 Parametern: dem String und der Position des zu ändernden Zeichens.
Die Funktion ruft sich solange wieder selbst auf bis das letzte Zeichen geändert wurde (und gibt dann den modifizierten String aus). Ansonsten ruft sich die Funktion zweimal selbst auf: einmal mit dem zum kleinbuchstabane geänderten Zeichen, einmal mit Großbuchstaben - die Position wird natürlich um 1 incrementiert.


CU Borlander
bei Antwort benachrichtigen
Borlander Nachtrag zu: „ Ja - Die Funktion muss nur folgendes machen: Aufgerufen wird sie mit 2...“
Optionen

Hab das eben beim Chatten nebenbei umgesetzt:

function variant($str, $pos)
{
  if($pos<strlen($str))
  {
    $str[$pos] = strtolower($str[$pos]);
    variant($str, $pos+1);
    $str[$pos] = strtoupper($str[$pos]);
    variant($str, $pos+1);
  }
  else
  {
    echo "$str<BR>";
  }
}

// CU Borlander
bei Antwort benachrichtigen
UselessUser Borlander „Hab das eben beim Chatten nebenbei umgesetzt: function variant str, pos if pos“
Optionen

Hi Borlander!

Es scheint immer 2^Wortlänge Kombinationen zu geben, bei 4 Buchstaben bswp. 16 Kombinationsmöglichkeiten.
1. Kommt dein Code auf diese Anzahl von Kombinationen?
2. Wenn ja, kannst du mir das Verfahren ein wenig erläutern, denn ich kenne die Syntax von PHP nicht: Warum ist "pos" ein String und was bedeutet "$str[$pos]" und "strtolower($str[$pos])"?

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
Borlander UselessUser „Hi Borlander! Es scheint immer 2 Wortlänge Kombinationen zu geben, bei 4...“
Optionen
1. Kommt dein Code auf diese Anzahl von Kombinationen?
Klar, sonst hätte ich sie kaum hier gepostet ;-)
Ist bei der Struktur auch garnicht anders möglich, das die Function sich jeweils 2 mal selbst aufruft. Für jeden Buchstaben wird für groß und klein verzweigt...
Das Prinzip basiert auf der selben Grundlase wie Dein Binäransatz - für Jedes Zeichen beide Möglichkeiten durchlaufen...

zu 2)
Kein Problem:
Warum ist "pos" ein String
Pos wird hier als Integer genutzt, PHP verwendet im Gegensatz zu Basic (und Dialiekten) für alle Variablen das $-Zeichen. Allerdings ist PHP da sowieso recht flexibel...

was bedeutet "$str[$pos]"
Damit kann man Char $pos des Strings $str ansprechen (als Left- und Rightvalue).

strtolower($str[$pos])
Die Function strtolower($string) gibt wie man am Namen schon fast vermuten könnte den in kleinbuchstaben konvertierten String zurück...


CU Borlander
bei Antwort benachrichtigen
UselessUser Borlander „ Klar, sonst hätte ich sie kaum hier gepostet - Ist bei der Struktur auch...“
Optionen

Hi Borlander,

thx für deine Erläuterungen. Werde bei Gelegenheit einmal versuchen, diese Variante in VB zu schreiben.

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
Borlander UselessUser „Hi Borlander, thx für deine Erläuterungen. Werde bei Gelegenheit einmal...“
Optionen

Müsstest Du fast 1 zu 1 übernehmen können, abgesehen von den Funktionsnamen...

bei Antwort benachrichtigen
Peter, der dritte Borlander „Das Problem kannst Du relativ einfach mit einer rekursiven Funktion lösen,...“
Optionen

Hallo UselessUser !
Danke für Dein VBScript. Es funktioniert ! Allerdings hätt' ich da noch eine Frage: Wie kann ich eine andere Ausgabeform wählen (.txt oder .html) ?
An Borlander: Wie verwende ich die PHP Funktion ? An einer passenden Ausgabeform wäre mir auch gelegen. Ebenfalls: Danke!

bei Antwort benachrichtigen
Borlander Peter, der dritte „Hallo UselessUser ! Danke für Dein VBScript. Es funktioniert ! Allerdings hätt...“
Optionen

Mit dem PHP Interpreter, am besten zusammen mit dem Apache Webserver (kannst Du auch lokal installieren) - Als Ausgabe erhält Du dann eine HTML-Seite, in eine Datei schreiben ist allerings auch kein Problem...

CU Borlander

bei Antwort benachrichtigen
UselessUser Peter, der dritte „Also, ich suche ein Prog, daß mir bei folgende Arbeit abnimmt: Als Vorgabe...“
Optionen

Hallo Peter III.!

Hier poste ich dir den Code für ein VBScript: Kopieren, in eine txt.-Datei einfügen und mit einem beliebigen Namen und der Endung ".vbs" abspeichern. Mit einem Doppelklick starten (Scripte müssen bei dir allerdings ablaufen dürfen, was die Standardeinstellung bei Windows ist) und jetzt dürfte es funktionieren.

Bei Wörtern, die länger als 5 Buchstaben sind, empfehle ich eine andere Ausgabeform, z. B. über HTML-Interface oder in eine Textdatei. Oder in VB. Oder, oder ... Aber das Prinzip wird hoffentlich deutlich.

'###### Begin Code
'----- MAIN
word = InputBox ("Bitte das Wort eingeben:", "Wortkombinationen")

For binpos = 1 To Len(word)
z = z + (2^(binpos-1))
Next

For pos = 0 To z
act = convert(pos)
actword = ""
For wordpos = 1 To Len(word)
If Mid(act, wordpos, 1) = 0 Then
actword = actword & UCase(Mid(word, wordpos, 1))
Else
actword = actword & LCase(Mid(word, wordpos, 1))
End If
Next
wordcombi = wordcombi & actword & vbCr
Next

MsgBox wordcombi

'----- SUBS
Function convert(pos)
deci = pos
Do
Select Case deci
Case 0
binary = "0" & binary : Exit Do
Case 1
binary = "1" & binary : Exit Do
Case 2
binary = "10" & binary : Exit Do
Case 3
binary = "11" & binary : Exit Do
End Select

deci1 = deci
deci = deci \ 2
decimo = deci1 Mod 2
If decimo = 0 Then
binary = "0" & binary
Else
binary = "1" & binary
End If
Loop

Do While Len(binary) binary = "0" & binary
Loop
convert = binary
End Function
'###### End Code


MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen