不計算函數簽名(只是主體)可以產生比這個函數更短的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;
}
不計算函數簽名(只是主體)可以產生比這個函數更短的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;
}
不長,但它的工作原理。
#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;
}
分段錯誤? – KedarX 2010-08-20 11:31:05
哪裏,當前提條件好? – user411313 2010-08-20 11:54:53
@Kedar:可能發生了段錯誤,因爲你傳遞了一個字符串常量或常量,你不應該這樣做,因爲它需要一個char *而不是'const char *'。你甚至可能得到了一個編譯器警告,告訴你不要這樣做。 – nategoose 2010-08-20 18:25:59
此功能甚至不起作用,您正在擦除您嘗試反轉的字符串。 abcd將變成dccd。您需要第二個參數來保存新字符串。如果你只是希望它很短但不能按預期工作,{return s;}就是答案。 – KeatsPeeks 2010-08-20 08:56:39
是的。你爲什麼想知道? – msw 2010-08-20 08:57:06
寫在一行不會使它更短... – 2010-08-20 09:00:49