今天的面试题目悲剧了 关于整型转字符串类型今天面试我的一个人 问我atoi和itoa知道不知道.我说好像有atoi
今天的面试题目悲剧了 关于整型转字符串类型
今天面试我的一个人 问我atoi和itoa知道不知道.我说好像有atoi, 没有itoa吧. 他说有, 我怎么记得好像没有.
然后让我写itoa的实现,我想了半天, 他给我了一个函数的接口,
char * itoa(int n) {
}
然后让我当场写里面的实现.
我思考了一下, 有不同的进制, 也不知道到底数值是多少位数, 也不知道该开辟多大的内存. 就一个参数该怎么做呢?
他跟我说这是最基本的. 问我是不是太久没写c了, 好像很简单似的.
最后悲剧了.我丢人了, 我说太麻烦了, 还没想明白.
大家知道怎么走么? 一个参数的话.好像不是很简单的事情吧 实现出来.
然后我回家的路上, 我在思考 面试的那个人是不是想考我sprintf啊? 不知道是这个意思吗?
没面试成功, 真悲剧感觉
[解决办法]
参数都是int n了,还不知道开多大内存啊-.-,然后找符号位,然后的还不简单么,找到最高位除10的对应幂,得到该位系数,取余得到剩下的,然后接着这么干..
[解决办法]顺便补充一下 最后要处理一下前面开始的一串连续0
[解决办法]char *itoa(int n)
{
int len,eve = 0;
bool rf;
char str[10];
if(n > 0)
rf = ture;
else
{rf = false;
n *= -1;
str[0] = '-';
}
while(n)
{
eve = n % 10;
n = n/10;
len ++;
str[len] = eve + '0';
}
reverse(&str[1]);//翻转字符串。
if(rf)
return &str[1];
else
{
return str;
}
}
没有编译不知道对错,不知道这样的函数能得几分?满分10分的话!
[解决办法]这真是你的问题了
[解决办法]面试千万不要就跟面试官说一句太麻烦了我不会就完事了,这样谁都不会要你
你至少可以说我考虑到内存分配多少没想明白,等等你在这里说的问题,至少说明你思考了,还有点基础,也就还有点机会。
[解决办法]char *_itoa(int n)
{
static char str[32];
str[31] = '\0';
char *cp = (char *)&str[30];
int flag = 0; /* < 0 ? */
if(n < 0) {
n = -n;
flag = 1;
}
do {
*cp-- = '0' + (n%10);
n /= 10;
} while((n));
if((flag)) {
*cp = '-';
} else {
++cp;
}
return cp;
}
内部static空间非可重入,长度限制。应付这个题应该够了!