C程序设计语言第二版习题3-6

简介: 修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。

问题描述

修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。

问题分解

  • 主函数main
  • 核心函数 itoa(n, s, len)。这道题比较简单,在3-4中itoa的基础上只要判断当前生成的字符串长度是否等于len,否则左侧用空格填充。因此我们的算法描述可以为:

    • 求取数字n的逆置字符串;
    • 判断字符串长度是否等于n,否的话在字符串后面填充空格,直到字符串的长度等于len
    • 使用reverse 函数逆置字符串得到正常的字符串。

代码实现

#include<stdio.h>

void itoa(int n, char s[], int len);
void reverse(char s[]);

int main()
{
    int n = (~0U >> 1) + 1, len = 20;
    char s[100];
    printf("The input number is: %d\n", n);
    itoa(n, s, len);
    printf("The output string is: %s\n", s);
    return 0;
}

void itoa(int n, char s[], int len)
{
    int sign, i, j;
    sign = n;
    i = 0;
    do {
        if (sign < 0)
            s[i++] = -(n % 10) + '0';
        else
            s[i++] = n % 10 + '0';

    } while ((n /= 10) != 0);
    if (sign < 0)
        s[i++] = '-';
    
    while(i < len)
        s[i++] = '  ';

    s[i] = '\0';
    reverse(s);
}

void reverse(char s[])
{
    int i, j, c;
    for (j = 0; s[j] != '\0'; j++)
        ;
    for (i = 0, j--; i < j; i++, j--)
    {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

编译运行

image

由运行结果可看出,得到的结果是预期的。

目录
相关文章
|
4天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
324 102
|
4天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
197 110
|
5天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
230 132