问题:

输入:“how are    you     baby--   "

输出:”woh era    uoy     --ybab   "

#include<stdio.h>
#include<string.h>
#define SWAP(a,b) (a)^=(b);(b)^=(a);(a)^=(b) char* sentenceReverse(char* input){
if(NULL == input) return;
char *r,*f;
char *inp = (char*)malloc(sizeof(char)*(strlen(input)+));
//当input是const时其内容不能修改,此时需要在堆上new一个新数组;
strcpy(inp,input);
r=f=inp;
printf("input is:%s-----\n",inp);
char *rear,*front;//用于标记一个单词的词首和词尾
while(*r){
while(*r==' ') r++;
f=r;
while(*r!=' ' && *r!='\0') r++;
r--;
front=f;rear=r;
while(rear > front){//翻转一个单词
SWAP(*rear,*front);
front++;
rear--;
}
if(*(++r)=='\0') break;
}
return inp;
} int main(){
char test1[]="1oow lsije ";
char *test2="sdklf ";
char *ret2;
printf("test1 result is:%s-----\n",ret2=sentenceReverse(test1));
printf("test2 result is:%s-----\n",sentenceReverse(test2));
free(ret2);//free掉malloc开辟的空间
return ;
}

输出结果:

xu@xu-ThinkPad-X61:~/algorithm$ gcc sentenceReverse.c
xu@xu-ThinkPad-X61:~/algorithm$ ./a.out
input is:1oow lsije -----
test1 result is:woo1 ejisl -----
input is:sdklf -----
test2 result is:flkds -----

总结:

一,当函数参数是test2时(注意它声明时是char * 类型),内存做了以下操作:1.在堆上保存test2指针。2.将其内容:"sdklf "保存在“常量区”(具体我也不清楚,反正该区域内容不能修改)。找到下面连接,问题解释的比较清晰:

http://blog.chinaunix.net/uid-26456800-id-3262510.html

二,当函数sentenceReverse()对数组char *test2内容修改时,总会报错“

段错误 (核心已转储)”。

三,解决方案:在堆上重新开辟新空间进行操作。如上函数中新建数组inp[ ];

四,当函数参数是test1时(注意是它声明时是char [ ]类型)就不存在内存“段错误”问题。其内容存储在堆上可以直接修改。

深藏功与名!

c:翻转一个长句中的每个单词的更多相关文章

  1. NLP之Bi-LSTM(在长句中预测下一个单词)

    Bi-LSTM @ 目录 Bi-LSTM 1.理论 1.1 基本模型 1.2 Bi-LSTM的特点 2.实验 2.1 实验步骤 2.2 实验模型 1.理论 1.1 基本模型 Bi-LSTM模型分为2个 ...

  2. js实现一个长页面中的图片懒加载即滚动到其位置才加载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. java遍历统计一个文件夹中所有文件单词出现次数

    思路就是通过递归进行文件遍历,把所有文件夹中的非目录文件都遍历一遍,并判断其中读取到的字符串是不是单词,并对单词进行记录和计数,并在最后进行排序输出,下面是代码: package word; impo ...

  4. Frogger POJ - 2253(求两个石头之间”所有通路中最长边中“的最小边)

    题意 ​ 题目主要说的是,有两只青蛙,在两个石头上,他们之间也有一些石头,一只青蛙要想到达另一只青蛙所在地方,必须跳在石头上.题目中给出了两只青蛙的初始位置,以及剩余石头的位置,问一只青蛙到达另一只青 ...

  5. 经典算法面试题目-翻转一个C风格的字符串(1.2)

    题目: Write code to reverse a C-Style String. (C-String means that "abcd" is represented as ...

  6. 解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据

    我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动 ...

  7. Android TV开发总结(七)构建一个TV app中的剧集列表控件

    原文:Android TV开发总结(七)构建一个TV app中的剧集列表控件 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必转载 ...

  8. 一个在开源中国博客上讲解的AC自动机

    原文出处:http://my.oschina.net/amince/blog/196426 原 荐 AC(Aho—Corasiek) 多模式匹配算法 摘要 如何在一篇文章中,搜索多个关键字,如何快速查 ...

  9. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

随机推荐

  1. NYOJ 330 一个简单的数学

    一个简单的数学题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 zyc近期迷上了数学,一天,dj想出了一道数学题来难住他.算出1/n,但zyc一时答不上来希望大家能 ...

  2. 如何利用百度音乐播放器的API接口来获取高音质歌曲

    第一步:在网页中打开以下网址: http://box.zhangmen.baidu.com/x?op=12&count=1&title=时间都去哪儿了$$王铮亮$$$$ 其中红色地方可 ...

  3. CSS hack 如何区分所有IE浏览器和非IE浏览器

    网上方法很多,例如,测试后得出以下结论,多余的话不说了,直入主题: 1.所有的推理IE浏览器 正解:此写法仅仅被lE浏览器识别,非IE浏览器不识别. <!--[if IE]> <st ...

  4. [ Swift框架 ] # SwiftyJSON

    Swift写的关于转化JSON数据 https://github.com/SwiftyJSON/SwiftyJSON

  5. 【百度地图API】如何调整结果面板的样式?如何获取指定页码的结果?

    原文:[百度地图API]如何调整结果面板的样式?如何获取指定页码的结果? 摘要: 1.你是否想自定义查询后,结果面板的显示样式? 2.数据接口每次只返回10条结果,如何取到单独每一页的结果? ---- ...

  6. 【百度地图API】除夕夜,大家一起来赶走“夕”——删除标注功能

    原文:[百度地图API]除夕夜,大家一起来赶走"夕"--删除标注功能 任务描述: 农历12月31日是中国传统的节日——除夕.你知道除夕是怎么来的麼? “夕”在中国古代神话中,可是一 ...

  7. 将字符串“abc”全排列成:abc、acb、bac、bca、cab、cba

     [STAThread]         static void Main()         {             string s = "abcd";           ...

  8. 登录记住账号和密码小Demo

    读取 // 1.读取沙盒中plist文件 // 1.1.获得沙盒根路径 NSString *home = NSHomeDirectory(); // 1.2.拼接Documents路径 NSStrin ...

  9. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  10. 开源 java CMS - FreeCMS2.2 模型管理

    项目地址:http://www.freeteam.cn/ 模型管理 从FreeCMS 2.0開始支持 通过模型添加删除字段,调整后台功能;支持网站.栏目.信息等模型. 因为操作方法同样.本文档以网站模 ...