比赛贴~微软又一道笔试题

yinqing_yx 2006-04-03 02:07:19
怎样只用4行代码编写出一个从字符串到长整形的转换函数?
...全文
11486 122 打赏 收藏 转发到动态 举报
写回复
用AI写文章
122 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartsmilea 2006-06-25
  • 打赏
  • 举报
回复
nod
风格比较重要
geniuscaobo 2006-05-28
  • 打赏
  • 举报
回复
学习一下
welfarefanwei 2006-05-28
  • 打赏
  • 举报
回复
Mark!
Could 2006-05-23
  • 打赏
  • 举报
回复
kao,此题还未结贴。
yinqing_yx 2006-04-25
  • 打赏
  • 举报
回复
神啊~告诉我怎么给分啊~10分不够分啊~~~55555555555~~~~
gold123d 2006-04-21
  • 打赏
  • 举报
回复
晚了,明天再看.
yuanchuang 2006-04-20
  • 打赏
  • 举报
回复
为能在一行显示下来,我把空格省了:
long strtol(const char *s){
long r = 0;
for (int i=0, a=((s[0]=='-')?s[++i]:s[0])-'0';(s[i]>='0')&&(s[i]<='9');r*=10,r+=a,a=(s[++i]-'0'));
return (s[0] == '-')?-r:r;
}
yuanchuang 2006-04-20
  • 打赏
  • 举报
回复
long strtol(const char *s){
long r = 0;
for (int i = 0, a = ((s[0] == '-')?s[++i]:s[0]) - '0'; (s[i] >= '0') && (s[i] <='9'); r *= 10, r += a, a = (s[++i] - '0'));
return (s[0] == '-')?-r:r;
}
stonepeter 2006-04-13
  • 打赏
  • 举报
回复
好像思路都是一样的。扫描,计算,结束~
yinqing_yx 2006-04-13
  • 打赏
  • 举报
回复
学习~
zengkun100 2006-04-13
  • 打赏
  • 举报
回复
scucj(浅云传说)的办法比较好,但是While循环里应该这样写才好while(*p >= '0' && *p <= '9'),不能只简单地判断字符是否为0
petertangpei 2006-04-11
  • 打赏
  • 举报
回复
留个名,下班了再看
柯本 2006-04-11
  • 打赏
  • 举报
回复
我也写一个,由small C的atoi函数简化而来,绝对经得起测试
原函数:
#define NOCCARGC /* no argument count passing */
/*
** atoi(s) - convert s to integer.
*/
atoi(s) char *s; {
int sign, n;
while(isspace(*s)) ++s;
sign = 1;
switch(*s) {
case '-': sign = -1;
case '+': ++s;
}
n = 0;
while(isdigit(*s)) n = 10 * n + *s++ - '0';
return (sign * n);
}
改进后

long atol(char *s)
{
long sign=1, n=0;
(*s=='-')?(sign=-1,s++):((*s=='+')?(s++):NULL);
while(*s) n = 10 * n + *s++ - '0';
return (sign * n);
}
royeyy 2006-04-11
  • 打赏
  • 举报
回复
long atol2(char * cp,long t_li,bool no)
{
if(*cp ==0x00) return no?t_li:-t_li;
else return *cp=='-'?atol2(cp+1,0,true):atol2(cp+1,t_li*10+cp[0]-0x30,false);
}
nizhiyu 2006-04-10
  • 打赏
  • 举报
回复
void myatol(char* p, long &r)
{
long base = ((*p == '-')?-1:1);
char *t = (p + strlen(p)-1);
for(r=0; (base>0)?(t >= p):(t>p); base *= 10, t--)
r = r + (*t-'0')*base;
}
kmlxk0 2006-04-10
  • 打赏
  • 举报
回复
study
Chopin 2006-04-10
  • 打赏
  • 举报
回复
// 判断是否为数字
#define MY_ISDIGIT(a) ( (a)>='0' && (a)<='9')

long my_atol(const char *a)
{
// 1. 初始化
long l = 0;

// 2. 判断正负
char sign = ( MY_ISDIGIT(*a) ) ? '+' : (*a!='+' && *a!='-') ? 0 : *a++;

// 3. 循环
while ( MY_ISDIGIT(*a) ) l = l*10 + ((*a++)&'\x0F');

// 4. 根据符号返回结果
return (sign=='+') ? l : -l;
}
hyblusea 2006-04-09
  • 打赏
  • 举报
回复
请问一下 怎样把 'a'之类的字母和其他一些字符转换为 数字?
erwa 2006-04-09
  • 打赏
  • 举报
回复
int *switch(char*c)
{int*d=new int[strlen(c)];
while(*(c++))*(a++)=int(*c);
return d;
}
minsavage 2006-04-09
  • 打赏
  • 举报
回复
long int atoli(char *p)
{
return (long int)atoi(p);
}

不知道这样行不呢?
加载更多回复(102)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧