Tworzenie kolejnego anagramu.

0

Witam.
Od kilku dni nie mogę rozwiązać jednego zadanka. Celem jest wczytanie wyrazu i stworzenie następnego analfabetycznie anagramu do niego. Imałem się różnych pomysłów, kilka razy zaczynałem od samego początku, jednak za nic nie mogę osiągnąć zamierzonego efektu. Będę wdzięczny za wszelakie sugestie i wskazówki.
Obecnie mam coś takiego:

#include <iostream>
#include <string.h>

using namespace std;
string reverse(string phrase)
{
		string reversed;
	    int l = phrase.length();
	    for(int i=0; i<l; i++)
	        reversed+=phrase[l-i-1];
	    return reversed;
}

char phrase[231];
int main() 
{
	cin >> phrase;
	reverse(phrase);
	for(int i=0; i<=strlen(phrase); i++)
	{
		if (phrase[i] < phrase[i+1])
		{
			char temp,temp2;
			temp = phrase[i];
			temp2=phrase[i+1];
		
			phrase[i]= temp2;
			phrase[i+1]=temp;
			break;
		}
	}
	cout << phrase;
}

Jest to jeden z pierwszych moich programów, także proszę o wyrozumiałość :)

0

Z tym już też próbowałem, jednak zawsze wychodziło mi co innego :/

int main() 
  { 
   int x;
   scanf("%300s",x);
   next_permutation(x,x+1);
   printf ("%s ",x);
   return 0;
  }
1

char x[300];
scanf("%300s",x);
next_permutation(x,x+strlen(x));

0

Dziękuję serdecznie za pomoc. Działa idealnie. Jednak od rana zastanawiam się, jak go przerobić, by wywołać n-ty anagram. Doszedłem do czegoś takiego:

	char x[300];
	scanf("%300s",x);
	int n;
	scanf("%s",n);
	for(int i=0; i<n; i++)
	{
		next_permutation(x,x+strlen(x));
	}
	printf(x); 

Prosiłbym o wskazówkę, co robię nie tak, bo ten kod niestety nie spełnia swojej roli..

0

scanf("%d",&n);

0

Gdy zmieniam %s na %d , tak jak sugerujesz, program się wysypuje po wpisaniu n :(

0

Próbowałem różnymi opcjami przy tej funkcji scanf, lecz ciągle wysypuje. Użyłem też strumienia cin, jednak wtedy wyniki złe wychodzą (?).
Mój obecny kod:

#include <cstring>
#include <algorithm>
#include <iostream> 
#include <fstream> 

int main() 
{ 
	char x[300];
	scanf("%300s",x);
	int n;
	scanf("%u",n); 
	for(int i=0; i<n; i++)
	{
		next_permutation(x,x+strlen(x));
	}
	printf(x);
}

Przy poleceniu są podane trzy przykłady: wyraz lato, ilość przesunięć 2 => alto; ala 3 => laa; mama 1 => aamm.
@ ShookTea
Nie, nie, pomyliłem się, alfabetycznie :)

0

AMPERSAND !!!!

scanf("%d", & <- tu znaczek magiczny n);

0

Niestety, to również nie rozwiązuje problemu. Mam ciagle niepoprawne wyniki. Niezbyt rozumiem czemu.

0

Podaj kod po poprawkach i napisz jakich wyników oczekujesz po krokach 1,2,3,4,5 i 6 dla napisu "ABC".

0

Ciężko mi powiedzieć w stu procentach. Nie chcąc wprowadzić w błąd, załączam dokładną treść zadania jaką dostałem w PDFie od wykładowcy.
No i moje wypociny w listingu poniżej. Próbowałem różnych opcji, także z sortowaniem znaków przed generowaniem permutacji.

#include <cstring>
#include <algorithm>
#include <iostream> 
#include <fstream> 

using namespace std ; 
int compare (const void * a, const void * b)
  {
   return *(char*)a-*(char*)b;
  }
int main() 
{ 
	char x[300];
	scanf("%300s",x);
	qsort (x,strlen(x),1,compare);
	int n;
	scanf("%d",&n); 
	for(int i=0; i<n; i++)
	{
		next_permutation(x,x+strlen(x));
	}
	printf(x);
}
1

for(int i=1;

0

Serdecznie dziękuję za pomoc i poświęcony czas :) wszystko działa prawidłowo. Mam jeszcze jedno pytano do tematu. Mógłbyś wyjaśnić w dwóch słowach, czemu tam ma być 1 a 0 już nie jest poprawne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1