2010-08-20 37 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 2010-08-20 08:56:39

+1

是的。你爲什麼想知道? – msw 2010-08-20 08:57:06

+5

寫在一行不會使它更短... – 2010-08-20 09:00:49

回答

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 2010-08-20 11:31:05

+0

哪裏,當前提條件好? – user411313 2010-08-20 11:54:53

+0

@Kedar:可能發生了段錯誤,因爲你傳遞了一個字符串常量或常量,你不應該這樣做,因爲它需要一個char *而不是'const char *'。你甚至可能得到了一個編譯器警告,告訴你不要這樣做。 – nategoose 2010-08-20 18:25:59