如何将一句英语句子的单词倒置

简介: 如何将一句英语句子的单词倒置

整体思路


这个题目的意思是什么呢?我举个例子:有这样的一句话,"i like beijing.",我们想要得到的结果是"beijing. like i"。那么我们应该用什么方法来实现呢?我们应该有个大体的思路:我们可以先将整个句子逆序得到".gnijieb ekil i",然后再将每个单词逆序得到"beijing. like i"。这样我们是不是就达到想要的结果了呢。那么知道了怎么做,我们就需要用代码来实现。


代码实现

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[101] = {0};
    gets(arr)  //兄弟们记住,这里最好不要用scanf,因为scanf读取到空格就会停止
    int len = strlen(arr);  //后面我们需要用到字符串的长度
    //逆序整句话
    ReverseStr(arr,arr+len-1);  //用函数来实现这个功能,后面还会再用到
}

这里关键就是ReverseStr函数的实现,这个函数既可以用来逆序整句话,也可以用来逆序单独的单词,我们只需要控制传进的参数就可以了。


ReverseStr函数的实现

void ReverseStr(char *left,char *right)
{
    while(left<right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}

在逆序完整句话之后,我们就来实现对单独单词的逆序

char* cur = arr;
while(*cur)
{
    char *start = cur;  //将每个单词的首字母的字符给start
    while(*cur != ' ' && *cur != '\0')  //这里不等于'\0'防止数组越界
    {
        cur++;
    }
    ReverseStr(start,cur-1)
    if(*cur != '\0')  //防止当cur指向'\0'时跳过‘\0’指向下一个位置,从而导致程序无法停止
        cur++;
}

这些完成了就基本实现了这个功能,下面就是代码的整体实现


代码的整体实现

#include<stdio.h>
#include<string.h>
void ReverseStr(char* left, char* right)
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[101] = { 0 };
    gets(arr);
    int len = strlen(arr);
    //逆序整句话
    ReverseStr(arr, arr + len - 1);
    //单词逆序打印
    char* cur = arr;
    while (*cur)
    {
        char* start = cur;
        while (*cur != '\0' && *cur != ' ')
        {
            cur++;
        }
        ReverseStr(start, cur-1);
        if (*cur != '\0')
            cur++;
    }
    printf("%s", arr);
    return 0;
}

image.png


今天就分享到这里了,祝大家在以后写代码的路上越写越顺。

相关文章
|
网络协议 Java 测试技术
MPG 模式的介绍 | 学习笔记
快速学习 MPG 模式的介绍
MPG 模式的介绍 | 学习笔记
|
Java Maven
从 HTML 模板导出 PDF 文件
学习如何使用 Thymeleaf 和 Flying Saucer PDF 库从 HTML 模板文件中导出 .pdf 文件
999 0
|
编解码 前端开发 UED
探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用
本文深入探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用。通过实际案例分析和注意事项的讨论,旨在帮助开发者更好地理解和运用媒体查询,提升移动端用户体验。
276 4
|
数据挖掘 C++
使用R语言进行时间序列分析
【4月更文挑战第25天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
412 2
|
存储 SQL 数据可视化
EMR Serverless StarRocks 5000CU*时免费试用——体验极致性能和全面 OLAP 分析
EMR Serverless StarRocks 5000CU*H 计算资源,48000GB*H存储资源免费试用进行中,提供极致的性能和丰富的 OLAP 场景模型,包括 OLAP 多维分析、数据湖分析、高并发查询以及实时数据分析,快来体验吧!
1801 0
EMR Serverless StarRocks 5000CU*时免费试用——体验极致性能和全面 OLAP 分析
|
机器学习/深度学习 存储 缓存
冷启动延时缩短50%-80%,阿里云函数计算发布冷启动加速技术
近日,阿里云函数计算重磅发布冷启动加速技术,将原本属于开发者的镜像优化负担转由函数计算承担,进一步帮助开发者提高生产效率,专注业务创新。该技术源于阿里集团超大规模和场景高度复杂的容器环境,对镜像存储、加速技术有深厚的积累,并出色地承担了3年双十一,双十二,春节等大促秒杀场景的严苛的挑战。
4789 70
冷启动延时缩短50%-80%,阿里云函数计算发布冷启动加速技术
|
缓存 算法 网络协议
(*长期更新)软考网络工程师学习笔记——Section 5 数据链路层
(*长期更新)软考网络工程师学习笔记——Section 5 数据链路层
(*长期更新)软考网络工程师学习笔记——Section 5 数据链路层
Threejs使用LOD根据摄像机距离物体的距离显示不同的物体
Threejs使用LOD根据摄像机距离物体的距离显示不同的物体
966 0
Threejs使用LOD根据摄像机距离物体的距离显示不同的物体