招银网络历年秋招笔试真题

如需获取完整资料,请点击下方链接领取《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软件笔试真题+答案合集 文章被收录于专栏

本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码

全部评论

相关推荐

点赞 评论 收藏
分享
10-08 16:13
已编辑
南京航空航天大学 C++
中安智能 软开 1.85*14 硕士211
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务