今天在线做一道360实习生笔试题, 发现大多数题还是比较基础的, 但都需要仔细斟酌. 不过我已被虐得面目全非, 操作系统和计算机网络相关的很多知识都不会, 还得努力学习. 不过说重点, 面试题有两个编程题, 第一个是实现hashmap, 第二题是一个字符串的处理, 我主要说说第二题, 题目描述如下:
实现域名的字段顺序翻转函数,比如输入www.so.com, 输出为com.so.www, 要求实现的效率尽可能的优化
在做这个题的时候还剩下不到10分钟, 慌忙中将题目看复杂了,我想成会有www.abc.efg.com这样的情况了, 于是惯性思维促使我使用c++将域名按”.”分段, 然后逆序输出, 写的也烂, 也不是效率最高的, 提交后再看题目发现域名是只有www和域名本体和com三个部分, 当然后面的的com可能是其他的后缀,比如io或者info之类的, 发现直接是memcpy()复制内存片段效率应该会更高, 即首先复制后缀, 然后复制域名本体, 然后再复制www到字符串缓冲区,然后输出就是结果了,于是用c实现了这个方法:
#include <stdio.h>
#include <string.h>
void trans(char *res, char *a)
{
strcat(a, "."); //在域名默认加上".", 因为"com", 移动到最前面后后面需要一个"."
const char *src = a; //复制一个常量副本, 因为memcpy()函数的参数中要求常量
int len = strlen(src) - 1;
int i = len;