#include <iostream>
using namespace std;
char *rev(char *str)
{
char *p=str,*q=p;
while(*q) ++q;
while(p<--q) { char ch(*p); *p--=*q; *q=ch; }
return str;
}
int main()
{
char str[]="Witaj";
cout<<str<<endl;
cout<<rev(str)<<endl;
cin.get();
return 0;
}
Ten kod jest nie tylko źle, za takie coś powinien być zakaz zbliżania się do kompilatora.
To jest nieczytelne i całkowicie bez sensu. Jednoznakowe nazwy zmiennych, masa gwiazdek, minusów, wiele instrukcji w jednej linii. Gorszego kodu chyba nie można sobie wyobrazić.
Gdy tym czasem wprost napisana funkcja:
char *rev(char *str) {
const std::size_t length = std::strlen(str);
for (std::size_t i = 0; i < length / 2; ++i) {
std::swap(str[i], str[length - i - 1]);
}
return str;
}
Po co to. Co daje maksymalnie nieczytelny kod? Myślisz, że ktoś się czegoś z tego nauczy? Chyba tylko tego, jak nie programować. Ile szybkości na tym zyskujesz? Większość Twoich rozwiązań jakie widzę na tym forum tak wygląda. Dlaczego? Nie potrafię tego zrozumieć.
Jeżeli ktoś liczy cykle, bo musi, to może jest to uzasadnienie, żeby używać takiego kodu. Ale nawet wtedy da się napisać to czytelnie! Czy ten wątek jest jednak o tym?
Co do rzekomej wydajności. Ja wyniki mam takie:
rev1: h4xi0r
3404 ms
rev2: plain c++
2012 ms
(GCC 4.7.2, -O2 -march=native
, Phenom II 3.2 GHz)
Króciutki opis testu i kod: Który kod jest bardziej czytelny