招银网络历年秋招笔试真题
如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)
不收费,3人组团即可一块免费领取!限量免费10000个名额
手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2
电脑端请扫码领取:
1、微机主机间编码转换
【题目描述】在银行的系统中存在微机和主机的交互,两者编码格式不同,譬如微机往主机传输的时候需要对字符串进行如下转码”abc中国ad美” 转为”abc<>中国<>ad<>美<>” (其中每个<>表示一个字节)再进行传输。现在对于某个字段,主机只接收字节长度为len的字符串,现在需要将微机的字符串str在传输给主机前作转码截取处理。
请根据要求写出函数或方法实现。
【解题思路】
解析连续的汉字和字母。注意汉字的编码特点。
【参考代码】
#include <iostream> #include <vector> #include <time.h> #include <sstream> using namespace std; string substring(string s, int length) { if(s.empty()){ return ""; } char *bytes; bytes = s.c_str(); int byteArr=s.length(); int n = 0; // 表示当前的字节数 int i = 0; // 要截取的字节数,从第3个字节开始 bool isFirst=false; for (; i < byteArr && n < length; i++){ // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节 if (i % 2 != 0){ n++; // 在UCS2第1个字节时n加1 } else{ // 当UCS2编码的第1个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节 if (bytes[i] != 0){ n++; if(!isFirst){ n+=2;//如果是第一个汉字 长度加2 } isFirst=true; }else{ isFirst=false; } } } //unicode是双字节 对于i为奇数 全角 则减1 半角 加1 if (i % 2 != 0){ if(bytes[i-1]!=0){ i -= 1; }else{ i+=1; } } return string(bytes, 0, i);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024软件笔试真题+答案合集 文章被收录于专栏
本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码