在最近的一次采访中,我的一位朋友被问到只使用一行代码来反转字符串的问题。
该字符串已存储在char*
变量中。
我尝试使用递归,但它从未简化为单行代码。
有人可以帮我吗?
答案 0 :(得分:7)
答案 1 :(得分:5)
如果你真的想要它在C中,并且允许strlen
,这将有效:
for( char *p = str, *q = str + strlen(str) - 1; p < q; *p ^= *q, *q ^= *p, *p++ ^= *q-- );
我不建议你在任何实际程序中使用它...任何人都知道如何摆脱strlen
?
编辑:更漂亮:
for( char *p = str, *q = strchr(str, 0) - 1, t; p < q; t = *p, *p++ = *q, *q++ = t );
答案 2 :(得分:3)
char str[] = "test";
std::reverse(str, str + std::strlen(str));
答案 3 :(得分:1)
这似乎工作正常
void reverse(char *s, int len) { \
if(len <= 1) \
return; \
char t; \
char *e = s + len - 1; \
while(s < e) { \
t = *s; \
*s = *e; \
*e = t; \
e--; \
s++; \
} \
}
请注意,他的代码全部在一行中。更喜欢代码清晰度。如果您可以使用语言功能将函数的代码放入一行,则使用这些功能。
答案 4 :(得分:0)
它需要一个丑陋的构造,涉及带有字符指针算法的while循环以及后递增和后递减运算符。从来没有,除了在混淆比赛中使用这种可怕的代码。 (不,甚至在采访中都没有。如果他们问你这样无用的琐事,他们很可能对其他事情一无所知。)