C语言题:IV---翻转字符串(二)

2013-07-22 17:57:26 · 作者: · 浏览: 396

 

  优雅的方法应该是这样的思路:

  找到这个字符串的中间位置,然后将其左边的字符与右边的字符交换位置。

  实现起来应该是下面这样:

  [cpp]

  #include

  #include

  int main()

  {

  char string[20], tmp;

  int length;

  printf("please input less than 20 char:");

  scanf("%s",string);

  printf("your input string is %s\n",string);

  //get string length,very useful method

  for(length=0;string[length];length++)

  ;

  printf("length is %d\n",length);

  //very beateful !!!

  for(int i=0;i

  {

  tmp = string[i];

  printf("tmp is %c\n" ,string[i]);

  string[i] = string[length-i-1];

  printf("string[%d] is %c\n",i,string[length-i-1]);

  string[length-i-1] = tmp;

  printf("string[%d] is %c\n",length-i-1,tmp);

  }

  printf("after revert:%s\n",string);

  return 0;

  }

  运行效果如下:

  [plain]

  D:\workspace\C\revert_string>gcc -o revert revert_string.c -std=c99

  D:\workspace\C\revert_string>revert

  please input less than 20 char:abc

  your input string is abc

  length is 3

  tmp is a

  string[0] is c

  string is a

  after revert:cba

  D:\workspace\C\revert_string>revert

  please input less than 20 char:abcd

  your input string is abcd

  length is 4

  tmp is a

  string[0] is d

  string is a

  tmp is b

  string is c

  string is b

  after revert:dcba

  这样的算法,相比之前要提高甚多效率。只要开动脑筋,世界会更加优雅。