面试题准备(01)-反转句子中单词的顺序
2015-07-05 17:59
351 查看
这道题查了很久的资料,最后还是找同学发现了问题。一开始是 char *a="I am a boy!"这样赋值的,这是一个字符串常量,其在程序中是存放在常量区的,其值是不能改变的。
一个已经犯了两次的错误。写在这记录下这个错误。
//反转句子中单词的顺序 2015.7.5 #include <stdio.h> #include<string.h> void ReverseWord(char* p, char* q) //单词两边对称交换 { while(p < q) { char t = *p ; *p++ = *q ; *q-- = t ; } } char * ReverseSentence(char *s) //使用字符指针,要考虑以‘\0结束的情况’ { char *p = s ; // point to the first char of a word char *q = s ; //after moved,point to a white space or '\0' int n=strlen(s); while(*q != '\0') { if (*q == ' ') //指针q一直自增,知道为第一个单词与第二个单词之间的空格 { ReverseWord(p, q - 1) ; //调用这个函数后,指针q不在所期望的位置上 q++ ; // move to next word p = q ; } else q++ ; } //最后一个单词的情况,以‘\0’结束 ReverseWord(p, q - 1) ; // Reverse the last word q=s+n-1; //指针q指向整个句子的结尾 ReverseWord(s, q ) ; // Reverse the whole sentence return s ; } void main() { char a[]="I am a boy!"; char *b=ReverseSentence(a); printf("%s",b); //printf(ReverseSentence(a)); printf("\n"); }
相关文章推荐
- 黑马程序员——Java基础---反射总结
- 百度研发工程师面试题
- 最正确的学习方法,程序员如何学习一项你之前完全不了解的新技术?
- 黑马程序员——Java基础---线程的另一个总结(10)--练习,空中网面试题总结
- 不能上网怎么解决
- 面试题37:两个链表的第一个公共结点
- 黑马程序员——Java集合框架—整理笔记
- 面试题33:把数组排成最小的数
- 面试题31:连续子数组的最大和
- 黑马程序员——引入头文件
- 黑马程序员——java基础---多线程
- 面试二叉树问题集锦
- 黑马程序员---Unix相关---常用命令
- 《程序员的修炼-培养思维潜能的9个习惯》 读书笔记
- Java并发3-多线程面试题
- 招聘初级程序员必须考虑的6个因素
- iOS面试题(3)----内存管理
- IOS面试题(2)----线程
- IOS面试题(1)----分类
- 黑马程序员——Java基础--内部类总结