2010-08-20 6 views
-3

Не считая сигнатуры функции (только тела), кто-нибудь может создать код C короче этой функции, который изменит строку и вернет результат как указатель на обратную строку .. (не используя строковая обратная библиотечная функция)?Самый короткий код C для изменения строки

char * reverse_str(char * s) 
{ 
    char c,*f=s,*p=s;while(*p)p++;while(--p>s){c=*p;*p=*s;*s++=c;}return f; 
} 
+7

Эта функция даже не работает, вы удаляете строку, которую вы пытаетесь изменить. abcd станет dccd. Вам понадобится второй параметр для хранения новой строки. Если вы просто хотите, чтобы он был коротким, но не работал должным образом, {return s;} - это ответ. – KeatsPeeks

+1

Да. Почему ты хочешь знать? – msw

+5

И писать его на одной строке не будет короче ... –

ответ

2

не дольше, но он работает.

#include <string.h> 

/* precondition: s!=const && s!=NULL && *s!='\0' */ 
char *mystrrev(char *s) 
{ 
    char *a=s,*e=s+strlen(s)-1; 
    while(a<e) 
    { 
    char c=*a; 
    *a++=*e; 
    *e--=c; 
    } 
    return s; 
} 
+0

ошибка сегментации? – KedarX

+0

где, когда предварительные условия в порядке? – user411313

+0

@Kedar: ошибка сегментации, вероятно, произошла из-за того, что вы передали ей строковый литерал или константу, чего вы не должны были делать, так как она принимает символ 'char *', а не 'const char *'. Возможно, вы даже получили предупреждение о компиляторе, говорящее вам не делать этого. – nategoose

Смежные вопросы