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

将数组"student a am i"改为"i am a student".

时间:2015-11-01 19:44:13      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:i am a student、数组元素逆置、my_strlen、assert

题目:

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

要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。


题目分析:

     由于题目中给定的字符串中包含空格字符,就不能简单的将数组的内容整个进行逆置,题目中要求不能使用库函数,并且只能开辟有限个空间,不能与字符串的长度有关,所以不能建立一个与原数组相同的数组来存放更改过的字符串。

     根据给定数组内容的特点,能够想到先将数组中的每个元素先进行逆置,然后对每个单词进行逆置。自定义一个字符串逆置函数和计算字符串长度函数,最重要的是要考虑全面,当字符串为空和字符串的首字符是空格字符的特殊情况。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
int my_strlen(const char *str)    //定义计算字符串长度函数my_strlen
{
    int count = 0;
    while(*str++)
   {
      count++;
    }
    return count;
}
 
void reverse_str(char *left, char *right)  //定义字符串逆置函数
{
     assert(left);
     assert(right);     //assert函数判断是否为空白字符
     while(left < right)
     {
         char tmp = *left;
         *left = *right;
         *right = tmp;
         left++;
         right--;
     }
}
 
void reverse(char arr[])    
{
     char *pstart = arr;   //定义字符串开始指针
     char *pend = arr + my_strlen(arr) - 1;    //定义字符串结束指针
     char *pcur = NULL;
     if((arr == NULL) || (arr[0] == ‘\0‘))  //判断字符串是否为空或首字符为空格
     {
        return ;    
      }
      reverse_str(pstart, pend);   //整个字符串的逆置
      while(*arr)
     {
         pcur = arr;
         while(*arr != ‘\0‘ && *arr != ‘ ‘)
        {
           arr++;
        }
        pend = arr - 1;
        reverse_str(pcur , pend);   //逆置每个单词
        if(*arr == ‘ ‘)
        {
           arr++;
        }
     }
}
 
int main()
{
    char arr[] = "student a am i";
    printf("%s\n", arr);
    reverse(arr);
    printf("%s\n", arr);
system("pause");
return 0;
 
}




本文出自 “无心的执着” 博客,转载请与作者联系!

将数组"student a am i"改为"i am a student".

标签:i am a student、数组元素逆置、my_strlen、assert

原文地址:http://10740590.blog.51cto.com/10730590/1708416

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