从网上看到网易有道2014届校园招聘的笔试题目,简单的做了一下编程和算法部分,都是一些平常遇到的题目,留一个笔记。
总共有两道编程题目和一个算法题目,编程题目要求写出可以运行的C/C++代码或者Java代码,第一个编程题如下:
(不是太清楚,但勉强能看)
对于这道题,应该是考察对于字符串的处理能力,应该是比较基础的题目。从题目的描述我们可以将要转换的字符串组合分成两大类
1,普通的字符串,不进行转换,如例子中的h1(两个尖括号中的内容)
2,以&开头并且以;(分号)结尾的的字符串,这类字符串需要按照给定的规则进行转换。该类有可以分成两类
1)&后面跟#和数字的UNICODE,需要当做一个UNICODE出来,输出的时候转换成相应的UNICODE进行输出
2)&后面试一个普通的字符串,是一个普通的转义字符,按照规则转换后输出
对于2中的2)我们可以先将转换规则存放在一个map<string, string> mapTable数据结构中,这样,每当我们遇到一个转义字符串的时候就可以通过查找这个mapTable得到
相应的转换后的字符。
具体代码如下:(没有考虑容错,如果有什么更好的代码方式,欢迎共同讨论)
#include <iostream>
#include <string>
#include <map>
#include <cstdlib>
using namespace std;
void parse(const string& srcStr, map<string, string>& mapTable)
{
if (srcStr.empty()) return ;
wcout.imbue(locale("chs")) ; //设置编码方式,能够输出unicode
int p0 = 0, p1 = 0, p2 = 0 ;
while(p0 != string :: npos && p0 < srcStr.length())
{
p1 = srcStr.find_first_of("#&", p0) ;
if (p1 == string :: npos)
{
cout << srcStr.substr(p0, srcStr.length() - p0) ; //一个普通字符串
return ;
}
else
{
cout << srcStr.substr(p0, p1 - p0) ;//一个普通字符串
p2 = srcStr.find_first_of(";", p1) ;
if (p2 == string :: npos)
{
cout << "Bad format" << endl;
return ;
}
string inStr = srcStr.substr(p1, p2 - p1 + 1) ;
if (inStr.length() >= 2 && inStr.at(1) == '#') //是一个UNICODE
{
int uniNum = atoi(inStr.substr(2, inStr.length() - 2).c_str()) ;
wcout << wchar_t(uniNum) ;
}
else //是一个普通的转义字符
{
string tmpStr = mapTable[inStr] ;
cout << tmpStr ;
}
p0 = p2 + 1;
}
}
cout << endl;
}
int main(int argc, char** argv)
{
string src ;
cin >> src ;
map<string , string > mapTable ;
mapTable["""] = "\"" ;
mapTable["&"] = "&" ;
mapTable["<"] = "<" ;
mapTable[">"] = ">" ;
parse(src, mapTable) ;
return 0 ;
}
突然发现上面代码中,由于优快云网站转码的问题,main函数中的一些字符串已经被自动转换了,我只好贴出图片了(2014.3.24修改):

本文分享了2014届网易有道校园招聘笔试的编程和算法题目,包括字符串处理和寻找序列下一个字典序的题目。字符串处理题目涉及字符串转Unicode,而寻找序列下一个字典序的题目提出了一种避免排序的优化解决方案。
最低0.47元/天 解锁文章
8683

被折叠的 条评论
为什么被折叠?



