问题:

输入:“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)+1));//当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 0;
}

输出结果:

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 [ ]类型)就不存在内存“段错误”问题。其内容存储在堆上可以直接修改。

深藏功与名!

转载于:https://www.cnblogs.com/McQueen1987/p/3546729.html

c:翻转一个长句中的每个单词相关推荐

  1. 算法:一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度

    一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度. 如:uyuy 11 ikkhkhkhk kkj,结果:9 最暴力方案1(没分,只能用于验证其他方案结果正确性): public s ...

  2. 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个 ...

  3. CV2视频剪辑,从一个长视频中截取多个视频片段

    前言 最近在项目中遇到了这样一个需求,要求读取视频,根据视频帧数剪辑出多个时长相对固定的视频片段(如第100.575.920帧的前后50帧).该需求通过cv2实现,前后大约修改过三次:1.第一种方法是 ...

  4. 《大明宫词》经典台词89句——欧式长句中的东方古典

    1,长安细雨,沐浴着太平:大明宫景,多少宿命.回首遥望苍穹下,世事浮沉,无常无情:终我一生,难寻太平. 2.一连数月的大雨将大明宫浸泡得仿佛失去了根基,甚至连人们的表情也因为多日未见阳光而日显苍凉伤感 ...

  5. 英语长句中的断句问题

    美音听力与发音技巧10:断句的区别 时间:2010-04-18 16:37来源: 作者: 点击: 3次 (断句) Welcome to Daily Tips on Learning English. ...

  6. python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...

    C语言编程求一个英文句子中的单词数和最长单词的位置.长度及输出这个单词. c++编程 从键盘输入一个英文 www.zhiqu.org     时间: 2020-11-23 我刚做了一关于英文句子里面每 ...

  7. 【C语言数组题】编写程序查找一个英文句子中所有的最长的单词

    [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 200 void ...

  8. 介词 + 宾语构成介宾,在句中作状语,表语,补语或宾语

    grammer 其实就是英语在表述中遵循的一种逻辑性的游戏规则:进而让听者知道说者的用义,最终的目的不是什么丰富而眩目的各种词性.句式,而是用义. 1. 举例 来看一个长句,介词+宾语作补语的例子: ...

  9. jieba分词_wordcloud词云美化——jieba结巴中文分词(将长句拆分)

    大家好,上一篇文章<五行代码上手WordCloud词云--用一个重复的单词做一个单词云>已经带大家初步认识了词云的基本制作流程,本节教大家如何对长句进行拆分制作词云: 首先我们来了解这张图 ...

最新文章

  1. java 创建servlet_javaweb02-创建第一个Servlet
  2. java 创建日程到期提醒_苹果“快捷指令”日程播报完美版
  3. 基于hexo搭建个人免费博客——基本设置和了解
  4. 你真的了解 timeout 吗?
  5. 微信支付开发(2) 扫码支付模式一
  6. mysql 内置存储过程_mysql 内置存储过程
  7. tomcat 不支持put 高版本_Tomcat-远程代码执行漏洞
  8. Lightbox插件
  9. 【Tomcat】修改密码
  10. Heka GeoIpDecoder 配置
  11. 蓝牙5.3 Core Spec演进与功能变化
  12. U3D教程宝典之两步实现超实用的XML存档
  13. Delphi with Lua5.1.3
  14. 镂空三角形(for循环找规律)
  15. Android城市列表
  16. 【SAS应用统计分析】软件的基本操及SAS数据集的整理
  17. jvm原理解析--不疯魔不成活
  18. linux ftp服务器配置本地账号,CentOS7 下安装和配置本地用户登录VSFTP服务器
  19. 【日常】某B视频网站模拟登录尝试
  20. 【运筹学】产销平衡下的运输问题概念理解(4月9日学习笔记)

热门文章

  1. java的程序编码,JAVA编码转换的详细过程
  2. python 流写入文件_Python数据流写入文件
  3. 机器学习中为什么需要梯度下降_机器学习 —— 多元梯度下降
  4. 文字虚线怎么去掉_PS十秒钟更改图片上的文字?没问题!这个小技巧你轻松get到手「16期」...
  5. 质量属性效用树_知识之森-数据化你的quot;知识树”
  6. 嵌入式系统——专业英语
  7. linux 邮件服务器 并给外网发送邮件,Linux下判断公网IP是否改变,并发送邮件通知...
  8. mysql5.0查询表_Mysql5.0查询表结构 | 学步园
  9. PAT (Basic Level) Practice1028 人口普查
  10. git pull命令报错