news 2026/7/15 22:41:04

C语言/数据结构实现数字字符串千分位格式化(去除前导零+保留小数部分)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言/数据结构实现数字字符串千分位格式化(去除前导零+保留小数部分)

问题描述

小M在工作时遇到了一个问题,他需要将用户输入的数字字符串转换为带千分位逗号的格式。输入可能包含小数部分,也可能不包含。处理规则如下:

  1. 去除前导零:如果整数部分前面有无效的0(比如"000123"),需要去除这些前导零,但注意不要去除小数点后的0(小数部分的0需要保留)
  2. 千分位格式化:整数部分从右向左每3位添加一个逗号(第一个逗号前可能不足3位)
  3. 保留小数部分:如果输入包含小数部分,则原样保留所有小数位;如果输入没有小数部分,则输出也不包含小数部分

注意:输入保证是有效的数字字符串,可能包含前导零,也可能包含小数点。

输入格式

  • 输入为一个字符串s,表示需要格式化的数字

输出格式

  • 返回格式化后的字符串

约束条件

  • 输入字符串长度不超过 100
  • 输入保证是有效的数字格式(可能包含前导零和小数点)
  • 输入至少包含一个数字(不会为空字符串)
  • 输入不会包含千分位逗号或其他非数字字符(除了可能的小数点)

程序代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char* formatNumber(char* s) {

char* result = (char*)malloc(200 * sizeof(char));

char integer[100], decimal[100];

integer[0] = '\0';

decimal[0] = '\0';

// 分离整数部分和小数部分

char* dot = strchr(s, '.');

if (dot != NULL) {

strncpy(integer, s, dot - s);

integer[dot - s] = '\0';

strcpy(decimal, dot + 1);

} else {

strcpy(integer, s);

}

// 去除整数部分的前导零

int start = 0;

while (integer[start] == '0' && integer[start + 1] != '\0') {

start++;

}

// 千分位格式化整数部分

char formatted[100] = "";

int len = strlen(integer + start);

int firstGroup = len % 3;

if (firstGroup == 0) firstGroup = 3;

int idx = start;

// 第一组

strncat(formatted, integer + idx, firstGroup);

idx += firstGroup;

// 后续每3位一组

while (idx < start + len) {

strcat(formatted, ",");

strncat(formatted, integer + idx, 3);

idx += 3;

}

// 拼接结果

if (dot != NULL) {

sprintf(result, "%s.%s", formatted, decimal);

} else {

sprintf(result, "%s", formatted);

}

return result;

}

int main() {

printf("%s\n", formatNumber("1294512.12412"));

printf("%s\n", formatNumber("0000123456789.99"));

printf("%s\n", formatNumber("987654321"));

printf("%s\n", formatNumber("0000.1200"));

printf("%s\n", formatNumber("1234"));

return 0;

}

#include <stdio.h> #include <stdlib.h> #include <string.h> char* formatNumber(char* s) { char* result = (char*)malloc(200 * sizeof(char)); char integer[100], decimal[100]; integer[0] = '\0'; decimal[0] = '\0'; // 分离整数部分和小数部分 char* dot = strchr(s, '.'); if (dot != NULL) { strncpy(integer, s, dot - s); integer[dot - s] = '\0'; strcpy(decimal, dot + 1); } else { strcpy(integer, s); } // 去除整数部分的前导零 int start = 0; while (integer[start] == '0' && integer[start + 1] != '\0') { start++; } // 千分位格式化整数部分 char formatted[100] = ""; int len = strlen(integer + start); int firstGroup = len % 3; if (firstGroup == 0) firstGroup = 3; int idx = start; // 第一组 strncat(formatted, integer + idx, firstGroup); idx += firstGroup; // 后续每3位一组 while (idx < start + len) { strcat(formatted, ","); strncat(formatted, integer + idx, 3); idx += 3; } // 拼接结果 if (dot != NULL) { sprintf(result, "%s.%s", formatted, decimal); } else { sprintf(result, "%s", formatted); } return result; } int main() { printf("%s\n", formatNumber("1294512.12412")); printf("%s\n", formatNumber("0000123456789.99")); printf("%s\n", formatNumber("987654321")); printf("%s\n", formatNumber("0000.1200")); printf("%s\n", formatNumber("1234")); return 0; }

运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 22:39:34

Pixhawk飘移模式:一种面向复杂环境的半托管智能飞行策略

1. 项目概述&#xff1a;飘移模式不是“失控”&#xff0c;而是给飞手留出呼吸空间的智能飞行策略 你第一次在Pixhawk地面站里点开飞行模式列表&#xff0c;看到 Drift Mode&#xff08;飘移模式&#xff09; 这个名字时&#xff0c;大概率会愣一下——它既不像Stabilize那样…

作者头像 李华
网站建设 2026/7/15 22:37:40

nginx.conf

一、 AI 产品上线后&#xff0c;第一次遇到流量峰值&#xff1a;营销活动带来 10 倍流量&#xff0c;系统扛不住了。推理服务崩溃、API 限流、用户投诉……这时候才意识到&#xff1a;AI 系统的架构设计不能只考虑正常情况&#xff0c;必须考虑流量峰值、模型故障、依赖服务不可…

作者头像 李华
网站建设 2026/7/15 22:37:21

使用 Docker 安装

一、 微服务架构从 5 个服务膨胀到 50 个服务后&#xff0c;客户端直接调用服务的方案彻底崩溃&#xff1a;50 个服务地址需要客户端配置&#xff0c;服务版本升级需要客户端同步更新&#xff0c;认证授权需要在每个服务重复实现……API 网关就是解决这些问题的统一入口。但 AP…

作者头像 李华
网站建设 2026/7/15 22:29:06

Pixhawk PosHold模式原理与4.1.7固件实操指南

1. 项目概述&#xff1a;为什么PosHold模式是飞手从“能飞”迈向“会控”的第一道分水岭你刚拿到Pixhawk飞控的无人机&#xff0c;调参软件里密密麻麻的飞行模式图标看得眼花——Stabilize、AltHold、Loiter、RTL、Auto……其中那个标着“PosHold”的选项&#xff0c;既不像Sta…

作者头像 李华
网站建设 2026/7/15 22:25:38

tensormsg API参考手册:完整函数与类使用指南

tensormsg API参考手册&#xff1a;完整函数与类使用指南 【免费下载链接】tensormsg The code for mutual conversion between ROS msg and PyTorch tensor used by IB-Robot serves to decouple lerobot itself from ROS code. 项目地址: https://gitcode.com/openeuler/te…

作者头像 李华