Nigdzie nie przypisujesz wartości do c
.
a[b]=c;
a[b]=a[i];
dwa przypisania pod rząd, pierwsze można usunąć.
a[b]
w pierwszej iteracji to znak kończący stringa ('\0'
), nadpisujesz go jakimś śmieciem. Jeśli jednak zamieniłbyś go z pierwszym znakiem, uzyskałbyś 0-znakowy string. Raczej nie o to chodziło.
Wywoływanie strlen(a)
w warunku pętli jest niekorzystne - będzie wywołane dla każdej iteracji.
Zamiast się męczyć użyj std::string
i reverse iteratorów:
string s;
getline(s);
cout << s << "\n" << string(s.crbegin(), s.crend()) << endl;
http://melpon.org/wandbox/permlink/ifmJjJ2X6eeSz1U4