#include <stdio.h> 
char *my_fanzhuan(char *s){//多写注释有助于初学者学习
    //想不出来就先画图 理清整体思路
    //先整体翻转
    //以中间一个单词或者间隙为中心 头尾每个字符挨个对称交换
    //交换用三杯水原则
    //定义两个指针一个在头部一个在尾部
    char *front = s;//头部指针
    char *back = s;//尾部指针
    while(*back){//将尾部指针移动到尾部\0
        back++;
    }
    back--;//从\0后退一个到字符串最后一个字母
    //判断条件指针 front > back
    //不管字符串个数是奇数还是偶数条件都能满足交换
    //空格也是字符串同样和对应的字母交换
    char temp = 0;//定义杯子临时变量
    while(front < back){
        temp = *front;//三杯水交换
        *front = *back;
        *back = temp;
        front++;
        back--;
    }
    //然后每个单词翻转,每一个单词头尾交换
    //也是三杯水交换,尾部指针判断条件为遇到空格或者\0
    //定义一个指针mark专门负责记录空格或者\0的位置
    char *mark = 0;
    front = s;//重置头尾指针的位置到初始位置
    back = s;
    while(*back){//用尾指针的移动到\0作为大循环停止的判断条件
        //大循环不确定次数 用while 确定次数 用for
        while(*back != ' ' && *back != '\0'){
            back++;
            //小循环每遇到空格或者\0后停止
        }    
        mark = back;
        //用mark记录一下当前空格或\0的位置方便后面移动到下一个单词用
        back--;//后退到前一位为交换单词的尾部字母
        //现在front在单词头部back在单词尾部
        while(front < back){//实现单词的头尾交换
        temp = *front;//三杯水交换
        *front = *back;
        *back = temp;
        front++;
        back--;
        }
        //实现交换后头尾指针的位置是乱的
        //要重新赋值初始化到下一个单词头尾位置
        //只需要将front back 移动到下一个单词的头部再做下一轮循环即可
        front = mark + 1;
        back = mark + 1;
    }
}
int main(int argc, const char *argv[])
{
    char s[128] = {0};
    gets(s);
    my_fanzhuan(s);
    printf("%s\n",s);
    //printf("%s\n",my_fanzhuan(s));
    //this is a book
    return 0;
}

测试:

输入:this is a book

输出:book a is this

关于用指针实现输入字符串以单词为元素反转输出思路相关推荐

  1. 1.统计所输入字符串中单词的个数。2.删除一个list里面重复元素。3.将列表中的偶数变成它的平方,奇数保持不变。4.输入字符串,将其每个字符的ASCII码形成列表并输出.5.猜单词游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 1.统计所输入字符串中单词的个数,单词之间用空格分隔. 代码: print("请输入字符(以空格隔开):" ...

  2. 统计输入字符串中英文单词的个数

    文章目录 1 输入一个英文字符串(一句话),统计输入的单词个数 1 输入一个英文字符串(一句话),统计输入的单词个数 #include <iostream> #include <Wi ...

  3. c语言怎么用scanf输入字母,c语言输入字符串(c语言怎么用scanf输入字符串)

    但是实际操作发现我的字符串无论输入的多长多短,都是输入的什么输出的就. 在C语言中,输入输出字符串有以下两种方式:1 用scanf/printf输入输出.scanf/printf是C语言的格式化输入输 ...

  4. C语言编程>第十周 ⑦ 请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行……

    例题:请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回.一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始和结尾都没有空格. 请勿改 ...

  5. 请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出。例如,输入字符串abcaca,输出bcc。

    请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出.例如,输入字符串abcaca,输出bcc. 输入样例: abcaca 输出样例: bcc 代 ...

  6. C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用

    本文是想用来记载作为菜菜的初学者的自己解决这个问题的过程>< 如果是想康康最终的代码,直接通过目录到达"风暴叒一次来临(正确的道路)就可以啦"~ 如果在代码输入之后出现 ...

  7. C语言-输入一行英文字符串统计单词个数

    C语言-输入一行英文字符串统计单词个数,单词之间以空格隔开 判断是否为单词的依据,通过一个flag标识,flag为0表示字符为空格,接下来出现不是空格,会将flag置为1 只有当flag为1且当前字符 ...

  8. [C语言]使用指针将输入的多个字符串按大小升序排序

    [C语言]使用指针将输入的多个字符串按大小升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按大小升序排序 要求:子函数 void StrSort(char ...

  9. [C语言]使用指针将输入的多个字符串按长度升序排序

    [C语言]使用指针将输入的多个字符串按长度升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按长度升序排序 要求:子函数 void StrSort(char ...

最新文章

  1. 2022-2028年中国客厅经济深度调研及投资前景预测报告
  2. mac 用 brew
  3. oracle创建 number,oracle创建表的方法和一些常用命令
  4. Linux下php5.3编译oracle客户端
  5. 【mycat】分库分表
  6. mysql锁的一些理解简书_MySQL锁系列之锁的种类和概念
  7. 使用WebBrowser控件获取网页源码的方法
  8. boost::stl_interfaces模块实现反向迭代器的测试程序
  9. tl494组成的超声波发射电路_透彻分析利用TL494组成的逆变器电路
  10. 一个好用的markdown表格生成工具
  11. Video在网页和移动端无法自动播放问题??
  12. 开机、问题-MocorDroid拔掉电池开机比正常关机后开机慢1分钟问题-by小雨
  13. Python列表推导式求素数
  14. 软件网站安全性的设计与检测与解决方案
  15. 时间管理-重要与紧急
  16. mac上面的文件分割与合并
  17. 对单位下三角矩阵的意外发现
  18. 【Stereo R-CNN 解读】基于立体R-CNN的自动驾驶三维目标检测
  19. 新版ECharts实现“暂无数据”的完美解决方案
  20. LeetCode 518 Coin Change 2 (python)

热门文章

  1. 配置无状态IPv6地址自动配置基础实验
  2. 网站提示DNS_PROBE_FINISHED_NXDOMAIN错误如何修复
  3. 基于云原生的私有化交付PAAS平台
  4. 明星热图|朱一龙环保主题大片出炉;李现为您开启新一年“红运”时刻;杨采钰成林清轩产品代言人...
  5. Android APP存储路径和缓存清理规范
  6. LACP负载分担配置
  7. 超图平台倾斜摄影发布流程
  8. 从“领域变迁”的视角,来看钉钉的“退让”与“进取”
  9. 中国会计科目的中英文对照
  10. PhotoShop: PSD精准切图