服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - c语言经典习题之逆序字符串详解

c语言经典习题之逆序字符串详解

2022-08-20 12:15厚积薄发 C/C++

这篇文章主要为大家介绍了c语言习题之逆序字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

使用指针逆序字符串

思路:

  • 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置
  • 交换两个指针位置上的字符
  • left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void reverse_string(char* str)
{
    char* left = str;//首元素
    char* right = str + strlen(str) - 1;//最后一个元素
    while (left < right)//交换
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
    //更新下标
        left++;
        right--;
    }
}
int main()
{
    char str[] = "abcdef";
    reverse_string(str);
    printf("%s", str);
    return 0;
}

使用递归逆序字符串

思路: 

  • 利用递归思想大事化小
  • 先将首元素放到一个变量中
  • 在将最后一个元素放到第一个元素位置
  • 再将最后一个空位置放上\0便于递归逆序中间字符
  • 最后再将首元素放到最后位置

c语言经典习题之逆序字符串详解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void reverse_string(char* str)
{
    int len = strlen(str);
    char tmp = *str;//拿出首元素放到tmp里
    *str = *(str + len- 1);//然后把最后一个元素放到第一个元素位置
    *(str + len - 1) = '\0';//把最后一个空位置放上一个\0
    if (strlen(str + 1) >= 2)//如果字符串还有两个以上字符就逆序
        reverse_string(str + 1);
    *(str + len - 1) = tmp;//最后把刚才在tmp里的元素放到字符串末尾
}
int main()
{
    char str[] = "abcdef";
    reverse_string(str);
    printf("%s", str);
    return 0;
}

逆序带空格的字符串

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

输入描述:

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

输出描述:

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

输入:

I like beijing.

输出:

beijing. like I

思路:

  • 第一步逆序每一个单词

c语言经典习题之逆序字符串详解

  •  第二步整体逆序

c语言经典习题之逆序字符串详解

?
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
#include <stdio.h>
//逆序字符串的函数
void reverse(char*left, char* right)
{
    while(left<right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[100] = {0};
    //输入
    gets(arr);//读取一行
    //处理
    int len = strlen(arr);
    //1. 逆序每一个单词
    char* start = arr;
    char *end = arr;
    while(*start)
    {
        end = start;
        while(*end != ' '  && *end!='\0')//找空格前面的字符
        {
            end++;
        }
        //逆序一个单词
        reverse(start, end-1);//end此时指向空格,end-1就是指向空格前面的字符
        if(*end == ' ')//如果没有遇到空格就开始逆序下一个单词。
            start = end+1;
        else//如果遇到空格就停止不要在指向下一个字符
           start= end;
    }
 //2. 逆序整个字符串
    reverse(arr, arr+len-1);
    //输出
    printf("%s\n", arr);
    return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/m0_61210742/article/details/122456196

延伸 · 阅读

精彩推荐
  • C/C++C语言实现三子棋源代码

    C语言实现三子棋源代码

    这篇文章主要为大家详细介绍了C语言实现三子棋源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    白龙码~7992021-10-26
  • C/C++C语言实现带头双向环形链表

    C语言实现带头双向环形链表

    这篇文章主要为大家详细介绍了C语言实现带头双向环形链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    aiyubaobei6802022-03-06
  • C/C++在C++中如何阻止类被继承详解

    在C++中如何阻止类被继承详解

    这篇文章主要介绍了在C++中如何阻止类被继承,对于C++初学者而言可以通过本文实例更好的理解类的原理及运用,需要的朋友可以参考下...

    moonz-wu7352022-01-17
  • C/C++关于C++内部类的介绍与使用示例

    关于C++内部类的介绍与使用示例

    今天小编就为大家分享一篇关于关于C++内部类的介绍与使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小...

    蜗牛2016692021-07-14
  • C/C++c++实现二叉查找树示例

    c++实现二叉查找树示例

    这篇文章主要介绍了c++实现二叉查找树示例,实现二叉查找树的基本功能,需要的朋友可以参考下...

    C++教程网9452021-01-16
  • C/C++C++利用递归实现走迷宫

    C++利用递归实现走迷宫

    这篇文章主要为大家详细介绍了C++利用递归实现走迷宫,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    春风来不来6732021-08-26
  • C/C++C++实现strcpy函数实例

    C++实现strcpy函数实例

    这篇文章主要介绍了C++实现strcpy函数实例,步骤讲解的很详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友跟随小编一起来研究吧...

    不妨不妨,来日方长10222021-10-14
  • C/C++浅析c++ 中const关键字

    浅析c++ 中const关键字

    const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。下面通过本文给大家分享c++ const关键字...

    李兆祥6692021-05-20