当前位置: 首页 > news >正文

华为OD机试真题 新系统-字符串格式调整(C/C++/Py/Java/Js/Go)

字符串格式调整

华为OD机试新系统真题 华为OD上机考试新系统真题 6月14号 100分题型

华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解

题目内容

输入一个字符串,字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来,按出现的顺序组成一个新的数字字符串;将所有字母提取出来,按出现的顺序组成一个新的字母字符串。最后将数字和字母按输入顺序交替输出,每个字母需要按其对应位置的数字n nn重复输出n nn次。如果两者长度不等,则将长出的部分直接拼接到末尾。

输入描述

输入只有一行,只包含大写字母和数字的字符串S ( 1 < = S(1<=S(1<=长度< = 100 <=100<=100)。

输出描述

输出只有一行,即按要求处理后的字符串。

补充说明

  • 每个字母按其对应位置的数字n nn重复输出n nn次,如果数字为0 00则该字母不输出
  • 如果只包含字母或只包含数字,直接输出原字符串

样例1

输入

A1B2C3

输出

1A2BB3CCC

说明

  • 数字:1 11,2 22,3 33
  • 字母:A , B , C A,B,CA,B,C
  • 交替输出:1 11(A AA重复1 11次)+ ++2 22(B BB重复2 22次)+ ++3 33(C CC重复3 33次)= ==1 A 2 B B 3 C C C 1A2BB3CCC1A2BB3CCC

样例2

输入

ABC0123

输出

01B2CC3

说明

  • 数字:0 00,1 11,2 22,3 33
  • 字母:A , B , C A,B,CA,B,C
  • 交替输出:0 00(A AA重复0 00次不输出)+ ++1 11(B BB重复1 11次)+ ++2 22(C CC重复2 22次)+ ++3 33(多余)= ==01 B 2 C C 3 01B2CC301B2CC3

样例3

输入

B

输出

B

说明
如果只包含字母或只包含数字,直接输出原字符串

题解

思路:模拟

  1. 按顺序遍历s提取数字字符和字母字符分别存储至alphaStrdigitStr中。
  2. 判断alphaStrdigitStr是否为空,如果存在一方为空情况直接输出另一方即可。
  3. 获取aLen = alphaStr.size(), dLen = digitStr.size(),对于len = min(aLen, dLen)部分按照题目意思进行模拟构造即可。
  4. 如果aLen != dLen的情况,将对应超过len = min(aLen, dLen)的子串拼接到结果中即可。

C++

#include<bits/stdc++.h> #include <cctype> using namespace std; string formatStr(string& s) { string alphaStr, digitStr; int n = s.size(); for (int i = 0; i < n; i++) { char c = s[i]; if (isdigit(c)) { digitStr.push_back(c); } else { alphaStr.push_back(c); } } // 有一方为空,直接返回另一部分即可 if (alphaStr.empty()) { return digitStr; } if (digitStr.empty()) { return alphaStr; } string ans; int dLen = digitStr.size(); int aLen = alphaStr.size(); // 处理相同长度部分交替输出 for (int i = 0; i < dLen && i < aLen; i++) { char digitChar = digitStr[i]; char alphaChar = alphaStr[i]; ans.push_back(digitChar); int repeate = digitChar - '0'; for (int j = 0; j < repeate; j++) { ans.push_back(alphaChar); } } // 考虑超过部分 if (dLen < aLen) { ans += alphaStr.substr(dLen); } if (aLen < dLen) { ans += digitStr.substr(aLen); } return ans; } int main() { string s; getline(cin, s); cout << formatStr(s); return 0; }

Java

import java.util.Scanner; public class Main { public static String formatStr(String s) { StringBuilder alphaStr = new StringBuilder(); StringBuilder digitStr = new StringBuilder(); int n = s.length(); for (int i = 0; i < n; i++) { char c = s.charAt(i); if (Character.isDigit(c)) { digitStr.append(c); } else { alphaStr.append(c); } } // 有一方为空,直接返回另一部分即可 if (alphaStr.length() == 0) { return digitStr.toString(); } if (digitStr.length() == 0) { return alphaStr.toString(); } StringBuilder ans = new StringBuilder(); int dLen = digitStr.length(); int aLen = alphaStr.length(); // 处理相同长度部分交替输出 for (int i = 0; i < dLen && i < aLen; i++) { char digitChar = digitStr.charAt(i); char alphaChar = alphaStr.charAt(i); ans.append(digitChar); int repeat = digitChar - '0'; for (int j = 0; j < repeat; j++) { ans.append(alphaChar); } } // 考虑超过部分 if (dLen < aLen) { ans.append(alphaStr.substring(dLen)); } if (aLen < dLen) { ans.append(digitStr.substring(aLen)); } return ans.toString(); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); System.out.print(formatStr(s)); } }

Python

defformat_str(s):alpha_str=[]digit_str=[]n=len(s)foriinrange(n):c=s[i]ifc.isdigit():digit_str.append(c)else:alpha_str.append(c)alpha_str=''.join(alpha_str)digit_str=''.join(digit_str)# 有一方为空,直接返回另一部分即可ifnotalpha_str:returndigit_strifnotdigit_str:returnalpha_str ans=[]d_len=len(digit_str)a_len=len(alpha_str)# 处理相同长度部分交替输出foriinrange(min(d_len,a_len)):digit_char=digit_str[i]alpha_char=alpha_str[i]ans.append(digit_char)repeat=int(digit_char)for_inrange(repeat):ans.append(alpha_char)# 考虑超过部分ifd_len<a_len:ans.append(alpha_str[d_len:])ifa_len<d_len:ans.append(digit_str[a_len:])return''.join(ans)s=input()print(format_str(s),end="")

JavaScript

constreadline=require('readline');functionformatStr(s){letalphaStr=[];letdigitStr=[];letn=s.length;for(leti=0;i<n;i++){letc=s[i];if(/\d/.test(c)){digitStr.push(c);}else{alphaStr.push(c);}}alphaStr=alphaStr.join('');digitStr=digitStr.join('');// 有一方为空,直接返回另一部分即可if(alphaStr.length===0){returndigitStr;}if(digitStr.length===0){returnalphaStr;}letans=[];constdLen=digitStr.length;constaLen=alphaStr.length;// 处理相同长度部分交替输出for(leti=0;i<dLen&&i<aLen;i++){constdigitChar=digitStr[i];constalphaChar=alphaStr[i];ans.push(digitChar);constrepeat=Number(digitChar);for(letj=0;j<repeat;j++){ans.push(alphaChar);}}// 考虑超过部分if(dLen<aLen){ans.push(alphaStr.slice(dLen));}if(aLen<dLen){ans.push(digitStr.slice(aLen));}returnans.join('');}constrl=readline.createInterface({input:process.stdin,output:process.stdout});constlines=[];rl.on('line',line=>{lines.push(line);});rl.on('close',()=>{consts=lines[0];console.log(formatStr(s));});

Go

packagemainimport("bufio""fmt""os""unicode")funcformatStr(sstring)string{varalphaStr[]runevardigitStr[]runefor_,c:=ranges{ifunicode.IsDigit(c){digitStr=append(digitStr,c)}else{alphaStr=append(alphaStr,c)}}// 有一方为空,直接返回另一部分即可iflen(alphaStr)==0{returnstring(digitStr)}iflen(digitStr)==0{returnstring(alphaStr)}varans[]runedLen:=len(digitStr)aLen:=len(alphaStr)// 处理相同长度部分交替输出fori:=0;i<dLen&&i<aLen;i++{digitChar:=digitStr[i]alphaChar:=alphaStr[i]ans=append(ans,digitChar)repeat:=int(digitChar-'0')forj:=0;j<repeat;j++{ans=append(ans,alphaChar)}}// 考虑超过部分ifdLen<aLen{ans=append(ans,alphaStr[dLen:]...)}ifaLen<dLen{ans=append(ans,digitStr[aLen:]...)}returnstring(ans)}funcmain(){reader:=bufio.NewReader(os.Stdin)varsstrings,_=reader.ReadString('\n')iflen(s)>0&&s[len(s)-1]=='\n'{s=s[:len(s)-1]}fmt.Print(formatStr(s))}

C语言

#include<stdio.h>#include<string.h>#include<ctype.h>char*formatStr(char*s){staticcharans[1000];charalphaStr[500];chardigitStr[500];intaLen=0;intdLen=0;intn=strlen(s);for(inti=0;i<n;i++){charc=s[i];if(isdigit(c)){digitStr[dLen++]=c;}else{alphaStr[aLen++]=c;}}alphaStr[aLen]='\0';digitStr[dLen]='\0';// 有一方为空,直接返回另一部分即可if(aLen==0){strcpy(ans,digitStr);returnans;}if(dLen==0){strcpy(ans,alphaStr);returnans;}intpos=0;// 处理相同长度部分交替输出intlimit=dLen<aLen?dLen:aLen;for(inti=0;i<limit;i++){chardigitChar=digitStr[i];charalphaChar=alphaStr[i];ans[pos++]=digitChar;intrepeat=digitChar-'0';for(intj=0;j<repeat;j++){ans[pos++]=alphaChar;}}// 考虑超过部分if(dLen<aLen){strcpy(ans+pos,alphaStr+dLen);pos+=strlen(alphaStr+dLen);}if(aLen<dLen){strcpy(ans+pos,digitStr+aLen);pos+=strlen(digitStr+aLen);}ans[pos]='\0';returnans;}intmain(){chars[500];fgets(s,sizeof(s),stdin);intlen=strlen(s);if(len>0&&s[len-1]=='\n'){s[len-1]='\0';}printf("%s",formatStr(s));return0;}
http://www.jsqmd.com/news/1018058/

相关文章:

  • 2026年陶瓷LED灯珠厂家推荐榜单:高导热/抗光衰/封装定制优选品牌与源头工厂深度解析 - 品牌发掘
  • 2026甄选:赛罕区蹲坑疏通公司,专业疏通,快解堵塞,诚信服务口碑之选 - 企业推荐官【官方】
  • 从操作细节看“ChatGPT品牌优化”:出海企业可以关注的五个方向
  • 存储性能测试方法论:从 fio 到业务场景的 Benchmark 设计
  • 跳出播放器思维,私有化视频会议平台EasyDSS一站式视频平台,重塑企业私有化融媒体/视频会议系统需求!
  • 2026 梅州黄金回收全域深度测评|合规商家实力详解与闲置黄金无忧变现指南 - zzlzzl6688
  • 从C#到Python:手把手教你搞定Halcon图像格式转换(附避坑指南)
  • 电瓶车托运上门取件操作流程 2026 新手办理全指南?电瓶车托运上门取件 2026新手办理全流程 - 快递物流资讯
  • 福州厦门电视花屏维修指南:图像闪烁原因分析与上门检修方案2026 - 简单到家
  • Dism++终极指南:免费开源Windows系统优化工具完整教程
  • 避开这3个坑,你的运输问题求解才算真的懂了:从退化、多解到产销不平衡实战解析
  • OmenSuperHub终极指南:3步解锁惠普OMEN游戏本隐藏性能的免费方案
  • 上海英国留学社科类面试网站:清晰指南重点技巧呈现 - 虚拟星辰
  • MSC8251片上互连核心CLASS寄存器编程与性能优化实战
  • 彻底解决64位应用程序区域语言模拟难题:Locale Remulator深度解析与实战指南
  • TV Bro:智能电视浏览器的终极解决方案,重新定义大屏上网体验
  • 那些告诉你“试剂差不多就行”的人,后来都怎么样了?
  • 免费AI背景移除插件终极指南:OBS背景移除插件完整教程
  • FLUX.1-dev模型bnb-nf4量化技术深度解析:V2版本如何实现精度与速度的双重突破
  • WarcraftHelper终极指南:让经典魔兽在现代电脑上完美运行的3大核心技术
  • MultiLogin终极指南:如何让正版与外置登录玩家在同一服务器畅玩
  • 2026济南靠谱防水补漏公司推荐TOP5:济南楼顶卫生间防水维修商家排名 专治房屋卫生间、阳台、屋顶、地下室、飘窗、外墙等反复渗漏难题 - 防水空鼓维修家
  • 2026 上海核心商圈附近黄金奢侈品回收优质店铺深度探店 - 奢侈品回收
  • 广州东莞灯具线路故障开关失灵维修 - 简单到家专业灯具维修服务 - 简单到家
  • 多维聚合实战:从OLAP立方体到实时流式聚合工程化
  • 2026晋中黄金回收实测攻略 正规门店盘点及避坑指南 - 润富黄金回收
  • 英雄联盟回放播放器终极指南:ROFL-Player免费开源工具完全解析
  • 收藏!AI大模型时代,别再死磕北上广了!新一线才是你的黄金赛道!
  • 3分钟彻底优化Windows 11:Win11Debloat一键清理工具完全指南
  • 2026 宁波名牌手表回收领先夺冠 积家梵克雅宝正规估价实测 - 奢侈品回收测评