Så var man tillbaks med ett problem igen...
Det är så att jag skulle vilja skriva ut alla permutationer av en textsträng. Jag har funderat en del på hur jag skulle kunna lösa detta men det går inte så bra. Jag har lyckats göra det för en sträng med tre bokstäver men det är enkelt och metoden gick inte att tillämpa generellt. Jag vill ha lite hjälp med en sådan metod.
Jag tror att det skulle vara smart att använda en rekursiv funktion men jag vet inte riktigt hur. De två banor jag funderat i är följande:
- Plocka ut tecken på tecken och ta bort det tillfälligt från strängen på något vis, för att sedan skriva ut tecknena man plockat ut och börja om från början igen. Har svårt att förstå hur jag skulle göra det, speciellt som man måste plocka ut olika följder av tecken varje gång.
- Ändra om i strängen och skriva ut vid lämpliga tillfällen. Vet dock inte riktigt vad, när etc jag ska ändra om och när jag ska skriva ut (kanske säger sig självt om jag löser ändringsproblemet).
Vore tacksam för lite hjälp!
Undrar även en liten sak, speciellt till er som jobbar med att programmera men även andra. Var ni duktiga på att programmera (tänker mest på att komma på lämpliga algoritmer) i början eller kommer det med tiden? Känns som att permutera en sträng inte borde vara så svårt och jag tycker att jag ofta har problem att hitta rätt algoritmer.
PeWMedlem sedan juni 200010 432 inlägg Du behöver inte ta isär strängen utan bara temporärt kopiera över valda delar till lämpliga variabler och visa upp kombinationerna. Ta exempelvis och kopiera in de tre första i en temporär array och gör de olika permutationerna på index.
Angående algoritmer och dylikt:
Det finns två vägar att programmera på. Det ena är try 'n error, det andra är via design. Det senare är såklart att föredra och är egentligen ett vitt begrepp. All form av programmering kan härledas till nån form av matematik. En del programmeringsspråk är mer lämpade än andra för att direkt översätta matematiska formler och uttryck. C / C++ tillhör väl inte direkt den mest lysande gruppen ur det avseendet. Så här behövs en mer genomtänkt design för att få igenom det som är tänkt. Den designen görs bäst medelst papper och penna, annars hamnar man lätt i den andra varianten av programmering (try'n error), vilket sällan leder till något bra.
Så, fram med papper och penna, gnugga geniknölarna och låt kodandet bli det lättaste jobbet :)
Tack!
Jag har faktiskt tagit fram papper och penna (första gången :) ) när det gäller den här uppgiften men jag lyckas ändå inte riktigt. Kommer inte på hur man gör permutationer på ett index. Det är väl ingen skillnad om jag permuterar index eller en string i sig själv?
Har dock inte riktigt gett uppgiften den tid den borde få än, då jag var lite stressad igår.
Tack så mycket för hjälpen!
Det är mycket enkelt att visa alla permutationerna av en textsträng:
#include <iostream>
#include <algorithm>
#include <string>
[B]int[/B] main()
{
[B]using[/B] [B]namespace[/B] std;
string str = [blue]"Texten"[/blue];
sort(str.begin(), str.end());
[B]while[/B] (next_permutation(str.begin(), str.end()))
cout << str;
}
Det jag vill göra är att försöka fixa algoritmen själv för att öva.
Tack ändå! :)
Jag lyckades lösa det, vet inte om det är ett bra sätt men tänkte jag skulle posta det här ändå :) Vill gärna veta vad ni tycker om min lösning, om den är bra eller om det finns mycket bättre lösningar?
void permutera_ordet(string ordet, string valda="")
{
string orginalOrdet=ordet;
int n=orginalOrdet.size();
for (int i=0; i<n; i++)
{
if (n==1)
{
valda.append(ordet);
cout << valda << endl;
}
else
{
valda.append(ordet.substr(i, 1));
ordet.erase(i, 1);
permutera_ordet(ordet, valda);
ordet=orginalOrdet;
valda.erase(valda.size()-1, 1);
}
}
}
PeWMedlem sedan juni 200010 432 inlägg Jag tycker det ser okej ut :)