新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区

发布时间:2026/10/2 6:59:24来源:尧图网络
C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区
问题描述小明在整理班级的图书角时发现每本书的封面上都印有一个字符可能是字母、数字或符号。为了便于分类老师希望将这些字符按照类型重新排序先排列所有数字字符0-9然后是所有字母字符a-z, A-Z最后是其他符号字符。同时要求在同类型字符中保持它们在原始字符串中的相对顺序不变。请帮助小明设计一个算法实现字符串的字符类型排序。要求算法的时间复杂度应为 O(n)其中 n 是字符串的长度。尽量减少额外空间的使用以体现算法优化能力。测试样例样例1输入s a1b2c3输出123abc解释原始字符串中的数字字符 1,2,3 排在前面接着是字母字符 a,b,c它们都保持了原始顺序。样例2输入s Hi! How are you? 123?输出123HiHowareyou! ? ?解释数字字符 1,2,3 先输出然后是大写字母 H,H小写字母 i,o,w,a,r,e,y,o,u最后是符号字符 !, 空格、?, 空格、?。所有字符保持原始相对顺序。样例3输入s Test123!!输出123Test!!解释数字字符 1,2,3 排在最前然后是字母字符 T,e,s,t最后是符号字符 !,!。约束条件1 ≤ s.length ≤ 1000字符串 s 可能包含任意可打印 ASCII 字符ASCII 值从 32 到 126输出字符串应包含输入字符串中的所有字符包括空格等符号且同类型字符的相对顺序与输入一致程序代码#include stdio.h#include string.h#include stdlib.hchar* sortCharacters(char* s) {int n strlen(s);char* result (char*)malloc((n 1) * sizeof(char));int idx 0;// 第一趟数字for (int i 0; i n; i) {if (s[i] 0 s[i] 9) {result[idx] s[i];}}// 第二趟字母for (int i 0; i n; i) {if ((s[i] a s[i] z) || (s[i] A s[i] Z)) {result[idx] s[i];}}// 第三趟其他符号for (int i 0; i n; i) {if (!(s[i] 0 s[i] 9) !(s[i] a s[i] z) !(s[i] A s[i] Z)) {result[idx] s[i];}}result[idx] \0;return result;}int main() {char* r1 sortCharacters(a1b2c3);char* r2 sortCharacters(Hi! How are you? 123?);char* r3 sortCharacters(Test123!!);printf(%s\n, r1); // 123abcprintf(%s\n, r2); // 123HiHowareyou! ? ?printf(%s\n, r3); // 123Test!!free(r1);free(r2);free(r3);return 0;}#include stdio.h #include string.h #include stdlib.h char* sortCharacters(char* s) { int n strlen(s); char* result (char*)malloc((n 1) * sizeof(char)); int idx 0; // 第一趟数字 for (int i 0; i n; i) { if (s[i] 0 s[i] 9) { result[idx] s[i]; } } // 第二趟字母 for (int i 0; i n; i) { if ((s[i] a s[i] z) || (s[i] A s[i] Z)) { result[idx] s[i]; } } // 第三趟其他符号 for (int i 0; i n; i) { if (!(s[i] 0 s[i] 9) !(s[i] a s[i] z) !(s[i] A s[i] Z)) { result[idx] s[i]; } } result[idx] \0; return result; } int main() { char* r1 sortCharacters(a1b2c3); char* r2 sortCharacters(Hi! How are you? 123?); char* r3 sortCharacters(Test123!!); printf(%s\n, r1); // 123abc printf(%s\n, r2); // 123HiHowareyou! ? ? printf(%s\n, r3); // 123Test!! free(r1); free(r2); free(r3); return 0; }运行结果
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

读懂GitHub日榜:从信号解读到开源项目评估的完整指南 2026/10/2 7:48:18

读懂GitHub日榜:从信号解读到开源项目评估的完整指南

GitHub日榜(daily trending)这个入口,我每天至少要看两遍,早上刷一遍,下班前再瞄一眼。2026-09-25这一天的榜单我也照惯例过了一遍,说实话,大部分项目还是那几种熟悉的面孔:围绕AI编…

阅读更多 →
数字回形针:用命令行实现零拷贝的临时文件聚合工具 2026/10/2 7:48:12

数字回形针:用命令行实现零拷贝的临时文件聚合工具

1. 为什么我会用一个“paperclip”来命名这个项目1.1 实体回形针和数字回形针的共同本质paperclip这个词,直译就是“回形针”。按理说,回形针是办公桌上最不起眼的东西,一盒一百根,用完就扔,没人会把它当回事。但真正让…

阅读更多 →
GitHub热榜深度解读:从刷榜到项目评估与源码学习 2026/10/2 7:48:12

GitHub热榜深度解读:从刷榜到项目评估与源码学习

每天早晚各刷一遍 GitHub 热榜(Trending),是我这些年雷打不动的习惯。2026年9月25日这份日榜,我在午休前完整过了一遍:前排的 star 涨幅、新上榜的面孔、老项目的例行更新,都扫了一眼。这篇文章不谈“哪个项…

阅读更多 →
SMETANA实战:从OTU丰度表到物种共丰度网络的全流程指南 2026/10/2 7:48:12

SMETANA实战:从OTU丰度表到物种共丰度网络的全流程指南

做宏基因组或者扩增子分析的朋友,到了某个阶段大概率都会碰到同一个需求:样本多了,OTU表也有了,想看看物种和物种之间到底有哪些联动关系,哪些物种总是“同进同退”,哪些又是“此消彼长”。我最早做这个&am…

阅读更多 →
SoC存储体系全解析:寄存器、Cache、SRAM、DDR与Flash的分工与选型 2026/10/2 7:48:05

SoC存储体系全解析:寄存器、Cache、SRAM、DDR与Flash的分工与选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SAP BAPI从原理到实战:调用技巧、性能优化与自定义开发 2026/10/2 7:48:05

SAP BAPI从原理到实战:调用技巧、性能优化与自定义开发

干这行久了你会发现,SAP系统里最值钱的东西不是那些看得见的界面,而是藏在函数库深处的那一堆BAPI。无论是做接口集成、做增强开发、还是处理那些“系统标准功能总差点意思”的业务场景,最后都得回到BAPI上来。这篇东西我酝酿了很久&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉