This page looks plain and unstyled because you're using a non-standard compliant browser. To see it in its best form, please upgrade to a browser that supports web standards. It's free and painless.

毛泽西

首页 | 资源中心 | 管理控制台

« | »

网易面试,问atoi实现的效率改进问题

silver6 | 10 十一月, 2005 08:58

今天去一面,面试官云风要我把笔试时做的atoi实现改进一下,我想了半天,终于想出一点,即确定某字符所在的万、千、百、十位后,本来是循环乘10,我说可以做一个数组里面就放上10000,1000,100,10,1,找到位数后直接索引再乘那个字符,这样多次乘法就减为一次了。可是云风说还可以改进,然后提示除了在数组里放上10000,1000,100,10,1之外还可以放别的数,甚至多位一起乘,当时真是紧张,完全没明白!
哪位高手指点一下?要是还有二面,我就好答了。我先去debug一下tc库里atoi的实现吧,等看懂了再来帖~

这是我刚开始学C++的时候,不知道C++里有可以把字符串转换成数字的函数是什么时,自己写的一个函数:
int strtoint(string s)
{
if (s[0] != '-')
{
s = "+" + s;
}
int n = 0;
for(int i = 1, l = s.size();i < l;i++)
{
if ((s[i] > 57)||(s[i] < 48))
{
cerr << "Please enter integrity!" << 'n';
system("pause");
exit(1);
}
n = n * 10 + (s[i] - 48);
}
if (s[0] == '-')
n = -1 * n;
return n;
}

最简单的是调试跟进去,前提是你已经安装了CRT的源代码,我VC7看到的代码是这样的:
long __cdecl _tstol(
const _TCHAR *nptr
)
{
int c; /* current char */
long total; /* current total */
int sign; /* if '-', then negative, otherwise positive */
#if defined (_MT) && !defined (_UNICODE)
pthreadlocinfo ptloci = _getptd()->ptlocinfo;

if ( ptloci != __ptlocinfo )
ptloci = __updatetlocinfo();

/* skip whitespace */
while ( __isspace_mt(ptloci, (int)(_TUCHAR)*nptr) )
#else /* defined (_MT) && !defined (_UNICODE) */
while ( _istspace((int)(_TUCHAR)*nptr) )
#endif /* defined (_MT) && !defined (_UNICODE) */
++nptr;

c = (int)(_TUCHAR)*nptr++;
sign = c; /* save sign indication */
if (c == _T('-') || c == _T('+'))
c = (int)(_TUCHAR)*nptr++; /* skip sign */

total = 0;

while ( (c = _tchartodigit(c)) != -1 ) {
total = 10 * total + c; /* accumulate digit */
c = (_TUCHAR)*nptr++; /* get next char */
}

if (sign == '-')
return -total;
else
return total; /* return result, negated if necessary */
}

#define _tchartodigit(c) ((c) >= '0' && (c) <= '9' ? (c) - '0' : -1)

int StrToInt(char* str)
{
int total=0;
while(*str != 0)
{
total = total * 10 + (int)(*str - '0');
}
return total;
}

long __cdecl atol(
const char *nptr
)
{
int c; /* current char */
long total; /* current total */
int sign; /* if '-', then negative, otherwise positive */

/* skip whitespace */
while ( isspace((int)(unsigned char)*nptr) )
++nptr;

c = (int)(unsigned char)*nptr++;
sign = c; /* save sign indication */
if (c == '-' || c == '+')
c = (int)(unsigned char)*nptr++; /* skip sign */

total = 0;

while (isdigit(c)) {
total = 10 * total + (c - '0'); /* accumulate digit */
c = (int)(unsigned char)*nptr++; /* get next char */
}

if (sign == '-')
return -total;
else
return total; /* return result, negated if necessary */
}

vc6下的源码。 atoi 也是调用 atol


回复 [回复]

wxshsjad希望大家健康平平安安幸福吉祥

rcvnflk | 09/03/2008, 15:27

Great site. Keep doing. cialis [URL=http://www.ocztechnologyforum.com/forum/member.php?u=53257]cialis[/URL] http://www.ocztechnologyforum.com/forum/member.php?u=53257 xanax [URL=http://www.dvxuser.com/V6/member.php?u=49383]xanax[/URL] http://www.dvxuser.com/V6/member.php?u=49383 cialis [URL=http://dotnet.org.za/members/GetCialis.aspx]cialis[/URL] http://dotnet.org.za/members/GetCialis.aspx phentermine [URL=http://www.dvxuser.com/V6/member.php?u=49381]phentermine[/URL] http://www.dvxuser.com/V6/member.php?u=49381 viagra [URL=http://board.talibkweli.com/index.php?showuser=3786]viagra[/URL] http://board.talibkweli.com/index.php?showuser=3786 [回复]

Great site. Keep doing.
cialis
[URL=http://www.ocztechnologyforum.com/forum/member.php?u=53257]cialis[/URL]
http://www.ocztechnologyforum.com/forum/member.php?u=53257
xanax
[URL=http://www.dvxuser.com/V6/member.php?u=49383]xanax[/URL]
http://www.dvxuser.com/V6/member.php?u=49383
cialis
[URL=http://dotnet.org.za/members/GetCialis.aspx]cialis[/URL]
http://dotnet.org.za/members/GetCialis.aspx
phentermine
[URL=http://www.dvxuser.com/V6/member.php?u=49381]phentermine[/URL]
http://www.dvxuser.com/V6/member.php?u=49381
viagra
[URL=http://board.talibkweli.com/index.php?showuser=3786]viagra[/URL]
http://board.talibkweli.com/index.php?showuser=3786

cialis | 04/07/2009, 05:12

Congratulations, Viagra, %OO, Order Viagra, ttsz, Viagra, =(((, Buy Viagra, 6783, Viagra, 970956, [回复]

Congratulations, Viagra, %OO, Order Viagra, ttsz, Viagra, =(((, Buy Viagra, 6783, Viagra, 970956,

Viagra | 04/07/2009, 10:14

Xanax [回复]

Best Wishes!, Tramadol
, 8-(((, Cheap Klonopin, 436189, cialis
, kefchb, Phentermine
, 043294, kamagra
, hzcvzy,

Xanax | 04/07/2009, 10:19

I Like Your Work, Buy Viagra, 53490, Buy Viagra, 5628, Viagra, tso, Buy Viagra, 1931, Order Viagra, 921895, [回复]

I Like Your Work, Buy Viagra, 53490, Buy Viagra, 5628, Viagra, tso, Buy Viagra, 1931, Order Viagra, 921895,

Buy Viagra | 04/07/2009, 11:00

kamagra [回复]

Thank You!, Valium, fgfybd, Cigarettes
, 1610, Xanax
, ycxk, Buy Cialis Online, >:PPP, Buy kamagra online, 8-(((,

kamagra | 04/07/2009, 11:17

Nise Site, Buy Viagra, :]]], Viagra, inz, Buy Viagra, 38259, Viagra, 013, Viagra, >:((, [回复]

Nise Site, Buy Viagra, :]]], Viagra, inz, Buy Viagra, 38259, Viagra, 013, Viagra, >:((,

Buy Viagra | 04/07/2009, 11:46

Phentermine [回复]

Good job., Cheap Valium, 871241, Buy Xanax, icrslj, Ativan, :DD, Cheap viagra, nvvzab, Buy Cialis Online, 272,

Phentermine | 04/07/2009, 12:16

Hello Everybody, Buy Viagra, 804190, Order Viagra, 564042, Buy Viagra, 862, Order Viagra, wryu, Order Viagra, eatyzr, [回复]

Hello Everybody, Buy Viagra, 804190, Order Viagra, 564042, Buy Viagra, 862, Order Viagra, wryu, Order Viagra, eatyzr,

Order Viagra | 04/07/2009, 12:32

Ativan [回复]

I like your work!, Tramadol, =((, Buy Valium, 388976, Cigarettes
, jojyej, viagra kaufen, iuf, comprare kamagra, 145,

Ativan | 04/07/2009, 13:16

Coolest Site, Buy Viagra, 76483, Buy Viagra, twwycw, Order Viagra, >:-P, Buy Viagra, 2542, Order Viagra, 5624, [回复]

Coolest Site, Buy Viagra, 76483, Buy Viagra, twwycw, Order Viagra, >:-P, Buy Viagra, 2542, Order Viagra, 5624,

Buy Viagra | 04/07/2009, 14:04

Cheap Ambien [回复]

Your Site Is Great!, Ambien
, :))), Buy Ativan, =D, viagra kaufen, ucowpb, Buy kamagra online, rffeqq, Phentermine
, >:-],

Cheap Ambien | 04/07/2009, 14:16

Congratulations, Order Viagra, vmx, Buy Viagra, qgng, Order Viagra, 8267, Viagra, =-), Order Viagra, 85093, Buy Viagra, 783069, Buy Viagra, cnk, [回复]

Congratulations, Order Viagra, vmx, Buy Viagra, qgng, Order Viagra, 8267, Viagra, =-), Order Viagra, 85093, Buy Viagra, 783069, Buy Viagra, cnk,

Viagra | 04/07/2009, 14:35

Cigarettes [回复]

I like your work!, Phentermine
, :PP, cialis
, zsd, kamagra, =-D, Viagra
, 8], Buy Xanax, 166855,

Cigarettes | 04/07/2009, 15:15

Beautiful Site, Order Viagra, zaouf, Order Viagra, 53055, Order Viagra, :), Buy Viagra, 896, Viagra, >:-]], Buy Viagra, 8OO, Viagra, 739, [回复]

Beautiful Site, Order Viagra, zaouf, Order Viagra, 53055, Order Viagra, :), Buy Viagra, 896, Viagra, >:-]], Buy Viagra, 8OO, Viagra, 739,

Buy Viagra | 04/07/2009, 15:21

Good Job, Viagra, pzfevn, Viagra, 270767, Order Viagra, zayfd, Buy Viagra, >:-), Buy Viagra, =-]]], Order Viagra, 210483, Viagra, =DDD, [回复]

Good Job, Viagra, pzfevn, Viagra, 270767, Order Viagra, zayfd, Buy Viagra, >:-), Buy Viagra, =-]]], Order Viagra, 210483, Viagra, =DDD,

Buy Viagra | 04/07/2009, 16:08

Buy Cialis [回复]

Thank You!, Phentermine
, %[[[, Viagra
, %[[[, Ativan, 6096, Diazepam, fpcs, Cialis
, sloz,

Buy Cialis | 04/07/2009, 16:13

Best Wishes!, Buy Viagra, =(, Buy Viagra, 8-), Order Viagra, 8-((, Viagra, tgbqnl, Order Viagra, :), Viagra, 022901, Buy Viagra, %))), [回复]

Best Wishes!, Buy Viagra, =(, Buy Viagra, 8-), Order Viagra, 8-((, Viagra, tgbqnl, Order Viagra, :), Viagra, 022901, Buy Viagra, %))),

Order Viagra | 04/07/2009, 16:55

Cialis [回复]

Good job., Ativan
, 901864, Buy Viagra online, 89532, Alprazolam, wkc, kamagra
, yywzes, Cialis
, 230,

Cialis | 04/07/2009, 17:12

Hi All, Viagra, 7046, Viagra, crbiu, Viagra, wpygt, Buy Viagra, %-))), Buy Viagra, =-)), Order Viagra, >:-))), Viagra, fbpqft, [回复]

Hi All, Viagra, 7046, Viagra, crbiu, Viagra, wpygt, Buy Viagra, %-))), Buy Viagra, =-)), Order Viagra, >:-))), Viagra, fbpqft,

Order Viagra | 04/07/2009, 17:42

Good Day, Viagra, >:]], Buy Viagra, :]], Buy Viagra, zbujha, Buy Viagra, :-]]], Viagra, iequlk, Buy Viagra, 766, Buy Viagra, hywjb, [回复]

Good Day, Viagra, >:]], Buy Viagra, :]], Buy Viagra, zbujha, Buy Viagra, :-]]], Viagra, iequlk, Buy Viagra, 766, Buy Viagra, hywjb,

Order Viagra | 04/07/2009, 18:28

Hello, Buy Viagra, %PP, Viagra, 87312, Viagra, ubj, Buy Viagra, asv, Viagra, =OOO, Buy Viagra, >:-[[, Viagra, 264, [回复]

Hello, Buy Viagra, %PP, Viagra, 87312, Viagra, ubj, Buy Viagra, asv, Viagra, =OOO, Buy Viagra, >:-[[, Viagra, 264,

Buy Viagra | 04/07/2009, 19:15

Wonderfull Site, Buy Viagra, czx, Order Viagra, qql, Viagra, 8PP, Order Viagra, bouv, Order Viagra, biwmlh, Order Viagra, pbjro, Buy Viagra, 12374, [回复]

Wonderfull Site, Buy Viagra, czx, Order Viagra, qql, Viagra, 8PP, Order Viagra, bouv, Order Viagra, biwmlh, Order Viagra, pbjro, Buy Viagra, 12374,

Order Viagra | 04/07/2009, 20:02

Cialis [回复]

Thank You!, Cheap viagra, 8-DDD, Buy Ambien, >:-PP, viagra on line, 1588, cialis on line, :))), Marlboro Cigarettes, 9735,

Cialis | 04/07/2009, 20:10

Simply Perfectly, Viagra, >:-]]], Viagra, =-[[, Buy Viagra, %PP, Viagra, >:-PPP, Buy Viagra, 243, Buy Viagra, 7674, Viagra, 005, [回复]

Simply Perfectly, Viagra, >:-]]], Viagra, =-[[, Buy Viagra, %PP, Viagra, >:-PPP, Buy Viagra, 243, Buy Viagra, 7674, Viagra, 005,

Buy Viagra | 04/07/2009, 20:48

Hi There, Buy Viagra, cewzpm, Viagra, 674, Buy Viagra, 1947, Buy Viagra, >:[, Viagra, nwx, Order Viagra, >:-], Order Viagra, :[, [回复]

Hi There, Buy Viagra, cewzpm, Viagra, 674, Buy Viagra, 1947, Buy Viagra, >:[, Viagra, nwx, Order Viagra, >:-], Order Viagra, :[,

Viagra | 04/07/2009, 21:35

Great site. Keep doing. phentermine [URL=http://www.dvxuser.com/V6/member.php?u=49381]phentermine[/URL] http://www.dvxuser.com/V6/member.php?u=49381 phentermine [URL=http://forum.desktopreview.com/member.php?u=145776]phentermine[/URL] http://forum.desktopreview.com/member.php?u=145776 phentermine [URL=http://www.ocztechnologyforum.com/forum/member.php?u=53258]phentermine[/URL] http://www.ocztechnologyforum.com/forum/member.php?u=53258 cheap tramadol [URL=http://board.talibkweli.com/index.php?showuser=3789]cheap tramadol[/URL] http://board.talibkweli.com/index.php?showuser=3789 cheap cialis [URL=http://dotnet.org.za/members/GetCialis.aspx]cheap cialis[/URL] http://dotnet.org.za/members/GetCialis.aspx [回复]

Great site. Keep doing.
phentermine
[URL=http://www.dvxuser.com/V6/member.php?u=49381]phentermine[/URL]
http://www.dvxuser.com/V6/member.php?u=49381
phentermine
[URL=http://forum.desktopreview.com/member.php?u=145776]phentermine[/URL]
http://forum.desktopreview.com/member.php?u=145776
phentermine
[URL=http://www.ocztechnologyforum.com/forum/member.php?u=53258]phentermine[/URL]
http://www.ocztechnologyforum.com/forum/member.php?u=53258
cheap tramadol
[URL=http://board.talibkweli.com/index.php?showuser=3789]cheap tramadol[/URL]
http://board.talibkweli.com/index.php?showuser=3789
cheap cialis
[URL=http://dotnet.org.za/members/GetCialis.aspx]cheap cialis[/URL]
http://dotnet.org.za/members/GetCialis.aspx

phentermine | 04/07/2009, 22:01

Perfect Site, Order Viagra, 8-[[[, Buy Viagra, hubjkp, Buy Viagra, 8-], Order Viagra, lqzy, Viagra, zwee, Buy Viagra, >:-[[[, Viagra, uje, [回复]

Perfect Site, Order Viagra, 8-[[[, Buy Viagra, hubjkp, Buy Viagra, 8-], Order Viagra, lqzy, Viagra, zwee, Buy Viagra, >:-[[[, Viagra, uje,

Buy Viagra | 04/07/2009, 22:22

Good Design, Viagra, vertex, Viagra, 23302, Buy Viagra, xbh, Viagra, 3638, Viagra, uaauy, Viagra, 03520, Order Viagra, ymimbf, [回复]

Good Design, Viagra, vertex, Viagra, 23302, Buy Viagra, xbh, Viagra, 3638, Viagra, uaauy, Viagra, 03520, Order Viagra, ymimbf,

Buy Viagra | 04/07/2009, 23:09

I Like Your Work, Order Viagra, =-), Buy Viagra, 470736, Buy Viagra, 8-OO, Buy Viagra, =-), Viagra, 8-OOO, Viagra, 468864, Buy Viagra, 8((, [回复]

I Like Your Work, Order Viagra, =-), Buy Viagra, 470736, Buy Viagra, 8-OO, Buy Viagra, =-), Viagra, 8-OOO, Viagra, 468864, Buy Viagra, 8((,

Viagra | 04/07/2009, 23:56

发表评论

标题

在此添加评论

称呼

邮箱地址(可选)

个人主页(可选)




Valid XHTML 1.0 Strict and CSS.
Powered by pLog
Design by Book of Styles