• 倒置字符串问题(C语言编程)


    问题描述

    将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

    输入描述:

    每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

    输出描述:

    依次输出倒置之后的字符串,以空格分割

    示例1:

    输入:
    I like beijing.
    输出:
    beijing. like I

    解题思路

    1.首先将输入的整个字符串逆序
    2.逆序字符串中每个的单词,注意的是单词间以 ’ '(空格)或者 ‘\0’(字符串结束标识)。
    在这里插入图片描述

    代码编写

    #include 
    #include 
    #include 
    
    //逆序函数
    void Reverse(char* left, char* right)
    {
        assert(left && right);
        while(left < right)
        {
            char tmp = *left;
            *left = *right;
            *right = tmp;
            left++;
            right--;
        }
    }
    
    int main()
    {
        char str[100] = {0};
        //输入
        gets(str);
        int len = strlen(str);
        //逆序整个字符串
        Reverse(str,str+len-1);
    
        char* cur = str;//cur指针存放需要逆序字符串的结尾地址
    
        while(*cur)//当cur指针指向的内容不为\0则循环
        {
            char*start = cur;//记录逆序字符串的起始地址
            
            //根据题意可知,单词的分割是以' '(空格)或者'\0'(字符串结束标志)
            while(*cur != ' ' && *cur != '\0')//判断指针是否指向字符串结束地址
            {
                cur++;
            }
            Reverse(start,cur-1);//逆序单词
            if(*cur == '')//当指向\0时,不再继续逆序单词
                cur++;
        }
    
        printf("%s\n",str);//输出逆置后的字符串
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    总结

    1.首先,需要理解通过指针操作逆序整个字符串。已知数组名为字符串首元素的地址。那么字符串结束的地址怎么求呢?需要通过求出字符串长度后,根据首元素+字符串长度-1后,便可以的到字符串结束的地址。逆序函数的两个参数,我们分别用字符串的首元素地址和字符串结束地址。根据创建临时变量,交换两个变量的值。每次交换后移动指针,便可以完成整个完成字符串的逆序函数的定义。
    2.逆序整个字符串后,分别逆序每个单词,根据题意,‘ '(空格)和 ‘\0’(字符串结束标识)分割每个单词。所以,创建两个指针变量,分别指向单词首元素地址和单词末尾元素地址。单词首元素地址为逆序后字符串的首元素地址,单词末尾元素地址可以通过 ’ ‘或’\0’的地址 - 1 的方法来得到。当完成一个单词逆序后,需要将原本指向末尾元素的指针+1,从而获取下一个单词的首元素地址。进而重复以上步骤,直到指向末尾元素的指针指向字符串结束的标识 ‘\0’。

  • 相关阅读:
    主定理(master定理)
    02UE4 C++ 入门【场景空间和三维向量结构体FVector】
    go gtk3 pcman-key
    基于时序行为的协同过滤推荐算法(Python)
    Windows 中环境变量的查看与设置
    k8s教程(09)-容器获取pod信息(Downward API)
    Elasticsearch(二)- 索引-分片过滤器与延迟再分配
    11-zinx-Golang-MMO服务器-AOI算法实现
    2022测试开发面试题大全及答案(包含测试基础|接口测试|自动化测试...)【289页】
    uniapp微信小程序电子签名
  • 原文地址:https://blog.csdn.net/m0_71927622/article/details/128127770