C语言实现倒置字符串的两种方法分享

 更新时间:2022年08月09日 11:46:49   作者:代码陈帅  
这篇文章主要和大家详细介绍了利用C语言实现倒置字符串的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手尝试一下

前言

今天在牛客网上刷了一道题,我感觉挺有意义的,现在我就分享给大家,并且告诉大家解题思路。

一、题目

事例:

输入下列字符: 

I like beijing.

输出的字符:

beijing. like I 

二、思路讲解 

1、设立一个数组存放输入的字符串

2、将其中每个单词进行逆置 得到 I ekil .gnjieb

3、再将字符串逆置  得到beijing.like I

三、代码实现

1.设立一个数组存放输入的字符串

#include <stdio.h>
 
int main()
{
    char arr[100] = { 0 };
    gets(arr);//注意没有使用scanf,因为scanf遇到空格就会停止接收输入的内容
 
    printf("%s\n",arr);
 
    return 0;
}

2、将每个单词进行逆置 

这其中需要注意几点:

1.整个语句如何结束循环

2.每个单词的起始位置和结束位置

3.内部如何实现

4. 判断语句结束,从而停止逆序

语句如何结束循环:

    char* t = arr;//将字符数组首元素的地址放入指针变量t中
    while (*t!='\0') {  
//判断当*t指向'\0'时循环结束。
}

每个单词的起始位置和结束位置 :

char* t = arr;//将字符数组首元素的地址放入指针变量t中
    while (*t!='\0') {  //判断当*t指向'\0'时循环结束。
        char* start = t;
        char* end = t;
          //当末指针指向空格,并且指向‘\0'循环结束。
        while (*end != ' '&&*end != '\0') {
            end++;
        }

内部怎么实现:

我们需要再自己定义一个函数reverse,用来实现字符串的交换

void reverse(char* left, char* right) {
    while (left < right) {//只有当左边的地址小于右边的地址时,才交换,中间的不需要交换
        char tmp = *right;
        *right = *left;
        *left = tmp;
        left++;
        right--;
    }
}

再调用这个函数:

int main() {
    char arr[100] = { 0 };
    gets(arr); //输入字符数组
    char* t = arr;//将字符数组首元素的地址放入指针变量t中
    while (*t!='\0') {  //判断当*t指向'\0'时循环结束。
        char* start = t;
        char* end = t;
          //当末指针指向空格,并且指向‘\0'循环结束。
        while (*end != ' '&&*end != '\0') {
            end++;
        }
        reverse(start, end - 1);
    }

怎样判断语句结束呢,从而停止逆序呢

if (*end != '\0')//判断是否到了字符串末尾
            t = end + 1;//让指针p指向下一个单词,让循环进入下一个单词
        else
            t = end;

3、将字符串逆置

这个要用到计算字符串长度的strlen函数,

int len = strlen(arr);

再调用reverse函数:

reverse(arr, arr + len - 1);

四、代码总结

void reverse(char* left, char* right) {
    while (left < right) {
        char tmp = *right;
        *right = *left;
        *left = tmp;
        left++;
        right--;
    }
}
int main() {
    char arr[100] = { 0 };
    gets(arr); //输入字符数组
    char* t = arr;//将字符数组首元素的地址放入指针变量t中
    while (*t!='\0') {  //判断当*t指向'\0'时循环结束。
        char* start = t;
        char* end = t;
          //当末指针指向空格,并且指向‘\0'循环结束。
        while (*end != ' '&&*end != '\0') {
            end++;
        }
        reverse(start, end - 1);
        if (*end != '\0')//判断是否到了字符串末尾
            t = end + 1;//让指针p指向下一个单词,让循环进入下一个单词
        else
            t = end;
    }
    int len = strlen(arr);
    reverse(arr, arr + len - 1);
    printf("%s\n", arr);
    return 0;
}

五、第二种方法倒置字符串

方法二的思路是这样先用t指向字符串的末尾,然后往前走,找到空格时,printf一下,以%s格式,这样打印只需要给字符串的首地址,它打印到\0停下。我们打印完一个单词后,把t的位置变成\0,然后继续往前走,直到数组开始位置。

t指针开始指向字符串最后一个字符,然后往前遍历,直到空格或者t到了最开始的字符位置,这里分两种情况,到空格位置,要把空格位置变成\0,打印cur+1位置,到首字符,打印cur位置。

其中需要注意一点,我们把空格位置变成了\0,所以在第一种情况需要打印的时候在加个空格

代码如下: 

int main()
{
    char arr[100] = { 0 };
    gets(arr);
    char* t = arr + strlen(arr) - 1;  //将t指针指向字符串最后一个字符
    while (t > arr)    //当t指针的地址大于arr首元素地址开始循环
    {
        while (*t != ' ' && t > arr)  //当t不为空格时,t指针往前循环指向
        {
            t--;
        }
 
        if (t == arr)
        {
            printf("%s", t);
        }
        else //到空格,打印t+1位置
        {
            printf("%s ", t + 1);
            *t = '\0';   //把空格位置变成‘\0'
        }
    }
    return 0;
}

六、总结 

今天的分享就到这了,第一种方法用数组,字符串逆置,容易想到,第二种方法,思路难,代码简单,两种方法都可以,今天的分享就到这了,谢谢大家的支持。

到此这篇关于C语言实现倒置字符串的两种方法分享的文章就介绍到这了,更多相关C语言倒置字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现外卖管理系统

    C语言实现外卖管理系统

    这篇文章主要为大家详细介绍了C语言实现外卖管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C++实现LeetCode(45.跳跃游戏之二)

    C++实现LeetCode(45.跳跃游戏之二)

    这篇文章主要介绍了C++实现LeetCode(45.跳跃游戏之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • OpenCV 颜色追踪的示例代码

    OpenCV 颜色追踪的示例代码

    这篇文章主要介绍了OpenCV 颜色追踪的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • C语言main函数的参数及其返回值详细解析

    C语言main函数的参数及其返回值详细解析

    main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出
    2013-10-10
  • 利用QT实现图片浏览器的示例详解

    利用QT实现图片浏览器的示例详解

    这篇文章主要和大家分享一个小案例:利用QT制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp,还可以从电脑上拖动图到窗口并显示出来,感兴趣的可以了解一下
    2023-02-02
  • JetBrains CLion永久激活超详细教程(最新激活方法)

    JetBrains CLion永久激活超详细教程(最新激活方法)

    JetBrains Clion 是一款专为 C/C++ 开发所设计的跨平台 IDE,本文适用 JetBrains CLion v2019.3/3.1/3.2/3.3 永久激活,附破解补丁和激活码,可以永久激活 Windows、MAC、Linux 下的 CLion,下面给大家分享JetBrains CLion永久激活超详细教程,感兴趣的朋友一起看看吧
    2023-01-01
  • C指针原理教程之C快速入门

    C指针原理教程之C快速入门

    C语言作为大学编程或者计算机专业的一门必修课,把很多初学编程的小伙伴都难住了,感觉无从下手,今天呢,我们来简单介绍下,如何快速入门C语言
    2019-02-02
  • C++中的内存对齐实例详解

    C++中的内存对齐实例详解

    这篇文章主要介绍了C++中的内存对齐实例详解的相关资料,这里不仅提供实现方法及代码还提供了手工制作图,来帮助到大家理解这部分知识,需要的朋友可以参考下
    2017-07-07
  • OpenCV使用稀疏光流实现视频对象跟踪的方法详解

    OpenCV使用稀疏光流实现视频对象跟踪的方法详解

    这篇文章主要为大家详细介绍了OpenCV如何使用稀疏光流实现视频对象跟踪功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • C语言 TerminateProcess函数案例详解

    C语言 TerminateProcess函数案例详解

    这篇文章主要介绍了C语言 TerminateProcess函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论