码迷,mamicode.com
首页 > 编程语言 > 详细

【面试常考】C语言:输入:"student a am i",输出"i am a student,不能使用库函数

时间:2015-10-31 18:46:04      阅读:548      评论:0      收藏:0      [点我收藏+]

标签:有一个字符数组的内容为:"student a am i"   请你将数组的内容改为"i am a student".   

#include<stdio.h>
//#include <assert.h>
void my_reverse(char *left ,char * right)
{
 //assert(left);
 //assert(right);   用以处理指针函数为空,保证有效
 while(left < right)
 {
  char tmp =  *left;  //借助中间变量实现逆置
  *left =  *right;
  *right = tmp;
  left ++;
  right --;
 }
}
int my_strlen(char *str)//得到数组长度定义求取字符串长度的函数
{
 int count = 0;
 while(*str++)
 {
  count ++; 
 } 
 return count; //返回count指向int型的具体值
}
void reverse(char arr[])  //char *arr
{ 
 char *pstart = arr;
 char *pend = arr + my_strlen(arr) -1; //注意数组从0开始
 char *pcur = NULL;
 if((arr == NULL) || (arr[0]==‘\0‘)) //空数组或数组结束,不处理
 {
  return ;   
 }
 my_reverse(pstart,pend);  //逆置整个数组
 while(*arr)//不为NULL,为‘\0’的情况
 {
  pcur =arr;  //数组开始地址
  while(*arr !=‘\0‘ && *arr !=‘ ‘)  //在单词内部时
  {
   arr++;
  }
  pend =arr - 1;  //退一位
  my_reverse(pcur, pend);    //逆置遇到空格的单词
  if(*arr == ‘ ‘)  //说明后面还有单词 
  {
   arr++; 
  }
 }
}
int main()
{
 char arr[] = "student a am i";  
 //思路:先将字符串逆置,再遇到空格处将该单词逆置即可
 reverse(arr);
 printf("%s\n",arr);
 return 0; 
}

技术分享

【面试常考】C语言:输入:"student a am i",输出"i am a student,不能使用库函数

标签:有一个字符数组的内容为:"student a am i"   请你将数组的内容改为"i am a student".   

原文地址:http://10740184.blog.51cto.com/10730184/1708309

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!