You will find algorithms that take fewer instructions, for example, in place of reverse
char* str_reverse_in_place(char *str, int len) { int i; for (i = len/2-1 ; i >= 0 ; --i) { char c = str[i]; str[i] = str[len-i-1]; str[len-i-1] = c; } return str; }
Speed optimization at this level, look at the inline keyword, also compile with (for gcc) using -O3 (usually this is better than adding a register ... yourself).
If you need an inverted string elsewhere, either specify it in a function (it is assigned to strlen(str)+1 - actually len+1 here are characters)
char* str_reverse(char *str, char *reverse, int len) { int i; for (i = len-1 ; i >= 0 ; --i) { reverse[i] = str[len-i-1]; } reverse[len] = 0; return reverse; }
or malloc it (it must be freed by the caller).
char* str_reverse_malloc(char *str, int len) { char *reverse = malloc(len+1); if ( ! reverse) return NULL; int i; for (i = len-1 ; i >= 0 ; --i) { reverse[i] = str[len-i-1]; } reverse[len] = 0; return reverse; }
Ring Ø
source share