C语言练习05(逆序实现)

代码说明:

  1. 字符串逆序
    • 使用双指针法(左右指针向中间移动交换字符),时间复杂度 O (n),空间复杂度 O (1)(原地修改)
    • 包含空指针检查和输入长度限制(防止缓冲区溢出)
    • 示例输入输出:输入 “hello” → 输出 “olleh”
#include <stdio.h>
#include <string.h>

// 字符串逆序函数(原地修改)
void reverse_string(char *str) {
    if (str == NULL) return;  // 空指针保护
    
    int len = strlen(str);
    char *left = str;
    char *right = str + len - 1;
    
    while (left < right) {
        // 交换左右指针指向的字符
        char temp = *left;
        *left = *right;
        *right = temp;
        
        left++;
        right--;
    }
}

int main() {
    char str[100];
    printf("请输入一个字符串(不超过99字符): ");
    scanf("%99s", str);  // 限制输入长度防止溢出
    
    reverse_string(str);
    printf("逆序后的字符串: %s\n", str);
    
    return 0;
}
    

代码说明:

  1. 整数逆序
    • 处理正负号,统一转换为正数计算
    • 使用长整型暂存中间结果,避免计算过程中溢出
    • 检查最终结果是否在 int 范围内(使用 <limits.h> 中的 INT_MAX/INT_MIN)
    • 示例输入输出:输入 123 → 输出 321;输入 – 456 → 输出 – 654;输入 2147483647(INT_MAX)→ 逆序后溢出返回 0
#include <stdio.h>
#include <limits.h>  // 用于INT_MAX和INT_MIN

// 整数逆序函数(返回逆序后的整数,溢出返回0)
int reverse_integer(int x) {
    long reversed = 0;  // 用长整型暂存防止计算过程中溢出
    int sign = (x < 0) ? -1 : 1;
    x = (x < 0) ? -x : x;  // 统一处理正数部分
    
    while (x > 0) {
        reversed = reversed * 10 + x % 10;
        x /= 10;
        
        // 检查是否超过int范围
        if (reversed > INT_MAX || reversed < INT_MIN) {
            return 0;
        }
    }
    
    return (int)(reversed * sign);
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    
    int reversed = reverse_integer(num);
    if (reversed == 0 && num != 0) {  // 排除0的情况
        printf("逆序后超出int范围,无法表示\n");
    } else {
        printf("逆序后的整数: %d\n", reversed);
    }
    
    return 0;
}
    

本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客

(0)
何大锤的头像何大锤管理团队

相关推荐

  • 第二章数据结构线性表 – 带头结点的单链表

    一、单链表的定义和表示 – 带头结点的单链表 1、定义 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名 若头指针名是L,则把链表称为表L 2、单链表的存储结构 二、单链表基本操作的算法实现 – 带头结点的单链表 2.1 单链表的初始化 2.2 判断一个链表是否为空 一、带头结点的单链表代码实现 共6种函数代码 三、头插法创…

    3小时前
    200
  • 第二章数据结构线性表 – 单链表定义

    一、引言 1.1 知识框架 1.2 有了数组为什么还要链表? 在前面我们介绍过数组,数组中元素是存储在连续的内存位置在声明数组时,我们可以指定数组的大小,但这将限制数组可以存储的元素数量 例如我们声明的是 int arr[10],那么arr数组最多可以存储10个数据元素 但是我们事先不知道元素的大小呢? 我们该如何去做? 当然首先想到的是申请一个足够大的数组…

    6小时前
    200
  • 04 程序流程结构

    C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构 循环结构:依据条件是否满足,循环多次执行某段代码 顺序结构:程序按顺序执行,不发生跳转 选择结构:依据条件是否满足,有选择的执行相应功能 4.1 选择结构 4.1.1 if语句 作用:执行满足条件的语句 if语句的三种形式 示例: 注意:if条件表达式后不要加分号 示例: 示例: 嵌套if…

    3天前
    300
  • 初始C语言01

    0、什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MC…

    4天前
    000
  • 01 你好Python

    一、课件

    4天前
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
网站建设中ing......