关闭

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

92人阅读 评论(0) 收藏 举报
分类:
#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; 
}

wKiom1Y0Pf-Cth4SAADIeoaWUZc883.jpg

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54452次
    • 积分:656
    • 等级:
    • 排名:千里之外
    • 原创:174篇
    • 转载:9篇
    • 译文:0篇
    • 评论:2条
    关于博主
    github:https://github.com/hanxiaojing Email: hanjing_1995@163.com 原51.cto: http://10740184.blog.51cto.com 欢迎来访~
    文章分类
    最新评论