使用c中的单行代码进行字符串反转

时间:2011-07-22 09:43:02

标签: c string

在最近的一次采访中,我的一位朋友被问到只使用一行代码来反转字符串的问题。 该字符串已存储在char*变量中。

我尝试使用递归,但它从未简化为单行代码。

有人可以帮我吗?

5 个答案:

答案 0 :(得分:7)

  1. 编写一个有效的程序。
  2. 将它们全部压缩到一行。您不需要在语句之间添加换行符!

答案 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循环以及后递增和后递减运算符。从来没有,除了在混淆比赛中使用这种可怕的代码。 (不,甚至在采访中都没有。如果他们问你这样无用的琐事,他们很可能对其他事情一无所知。)