一道腾讯公司的面试题

2504阅读 4评论2011-01-26 shell_way
分类:C/C++

给你一个字符串str, 给你一个位置flag,把位置flag后的字串搬到这个字符串的开头
比如str[] = abcdefg 如果flag = 4,那么结果就是 efgabcd.
条件:不允许直接或间接使用任何的额外的变量。

 

  1. #include <stdio.h>

  2. char str[] = "1234567890";
  3. int flag = 5;

  4. void func (void);

  5. int main
  6. (void) {

  7.         func ();
  8.         
  9.         str[sizeof (str) - 1] = '\0'; /*字符串总是以NUL结尾*/
  10.         printf ("%s\n", str);
  11.         
  12.         puts ("\nPress ENTER to exit...\n");
  13.         getchar ();

  14.         return 0;
  15. }

  16. void func
  17. (void) {

  18.         /*如果没有交换到字符串最后*/
  19.         if ((sizeof (str) - 1) != (flag + str[sizeof (str) - 1])) {
  20.                 /*利用位操作交换str[i]和str[flag+i]*/
  21.                 /*字符串最后的NUL作计数器i*/
  22.                 str[str[sizeof (str) - 1]] ^= str[flag + str[sizeof (str) - 1]]; /*两个变量进行异或杂交*/
  23.                 str[flag + str[sizeof (str) - 1]] ^= str[str[sizeof (str) - 1]]; /*从杂交体提纯*/
  24.                 str[str[sizeof (str) - 1]] ^= str[flag + str[sizeof (str) - 1]]; /*提纯*/
  25.                 ++str[sizeof (str) - 1]; /*自增计数器*/
  26.                 func (); /*递归处理*/
  27.         } else {
  28.                 return;
  29.         }
  30. }
上一篇:分析C语言的声明
下一篇:Vim配置文件 v2010-01

文章评论