标签: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