Witam,
napisałem program, który pobiera od użytkownika dowolny palindrom, następnie generuje jego ostatni alfabetycznie odpowiednik. Dla przykładu:
wejście: latootal wyjście: tolaalot
wejście: alaala wyjście: laaaal
Wszystko działa ok, przykładowe i wymyślone przeze mnie dane przechodzą bez problemu. Jednak z założenia ma być użyty kompilator G++ (taki jest na platformie uczelni), natomiast ja pisałem w IDE Dev C++, w którym jest Mingw port GCC. I na wyjściu w przypadku ciągu: latootal zamiast tolaalot otrzymuję dwa romby ze znakiem zapytania tolaDZalot. I tutaj niezbyt wiem jak się tego pozbyć, więc kieruję prośbę do Was o wskazówki, na kierunkowanie mnie co może być nie tak :)
Kod programu:
#include <cstring>
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std ;
char x[231];
int compare (const void * a, const void * b)
{
return *(char*)a-*(char*)b;
}
void reverse(char word[])
{
int len=strlen(word);
for (int i=0;i<len/2;i++)
{
word[i]^=word[len-i-1];
word[len-i-1]^=word[i];
word[i]^=word[len-i-1];
}
}
int main()
{
char x2[231];
char x3[231];
scanf("%300s",x);
if (strlen(x) % 2 == 0)
{
strncpy(x2,x,strlen(x)/2);
qsort (x2,strlen(x2),1,compare);
reverse(x2);
strncpy(x3,x,strlen(x)/2);
qsort (x3,strlen(x3),1,compare);
cout << x2 << x3;
}
else if (strlen(x) % 2 != 0)
{
int lenght = strlen(x);
int t1 = lenght/2;
strncpy(x2,x,strlen(x)/2);
qsort (x2,strlen(x2),1,compare);
reverse(x2);
strncpy(x3,x,strlen(x)/2);
qsort (x3,strlen(x3),1,compare);
cout << x2<<x[(strlen(x)/2)]<<x3;
}
}