有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
2015-10-30 20:01
267 查看
★有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:只能开辟有限空间,即字符个数与开辟的空间大小没有直接关系,不运用相关库函数
想法:先将字符串整个逆置,形成i ma a tneduts,然后利用指针,如果指针指向空白符,说明前边的内容为一个单词然后逆置,直到指针指向的内容为'\0'的前一项位置,此时字符串则为i am a student.
要求:只能开辟有限空间,即字符个数与开辟的空间大小没有直接关系,不运用相关库函数
想法:先将字符串整个逆置,形成i ma a tneduts,然后利用指针,如果指针指向空白符,说明前边的内容为一个单词然后逆置,直到指针指向的内容为'\0'的前一项位置,此时字符串则为i am a student.
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> //断言的库函数文件,用以执行时抛出异常 void my_reverse(char *left,char *right) //定义具有逆置字符功能的函数 { assert(left); //断言,以保证传进的两个指针类型的参数是否不为空(有效) assert(right); char tmp=NULL; while (left < right) { tmp = *left; *left = *right; *right = tmp; left++; right--; } } int my_strlen(char *str) //定义求取字符串长度的函数,返回count指向int型的具体值 { int count = 0; while (*str++) { count++; } return count; } void reverse_str(char arr[]) //定义逆置字符串的函数 { char *start = arr; char *end = arr + my_strlen(arr) - 1; //此处的字符串长度就可以调用my_strlen char *curr=NULL; if ((arr == NULL) || (arr[0] == '\0')) //如果指针为空或者首元素为字符串结束符 { return; //字符串为空,直接结束程序 } my_reverse(start,end); while (*arr) //不为NULL,‘\0’的情况 { curr = arr; while ((*arr != '\0') && (*arr != ' ')) //元素不为\0和空白符,说明一个单词还未读取完毕 { arr++; } end = arr - 1; //如果为空白符arr-1说明退至此单词末尾字母处,如果为‘\0' arr-1说明退至字符串结束位置处的前一位 my_reverse(curr,end); if (*arr == ' ') //指针指向的内容为空白符时,指针移动到下一单词的首字母处,去除了指向结束符时指针仍旧移动而越界的弊端 { arr++; } } } int main() { char arr[] = "student a am i"; reverse_str(arr); printf("%s\n", arr); system("pause"); return 0; }
相关文章推荐
- F - Help!
- 车是银色好还是白色好?
- 深入地学习OC(1)
- Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏
- struts-2 国际化的个人理解
- Linux下常见性能分析工具
- Android ANR分析与总结
- 自定义View
- 我对公司产品操的那些蛋心【持续更新】
- (转)支付宝牛逼的原因:来看内部架构剖析
- 2015南阳CCPC H - Sudoku 数独
- Genymotion 报打不开VirtualBox问题
- 机房收费系统——测试分析报告
- 使用JSON进行数据传输的总结
- 1067. Sort with Swap(0,*)
- 少年Pi的奇幻漂流
- 洛谷2344 奶牛抗议(DP+BIT+离散化)
- 50个常用sql语句
- HANA学院(1)-创建数据服务存储库 (Create data services repository)
- POJ 3264 Balanced Lineup(线段树—求区间最大值与最小值差)