社区
数据结构与算法
帖子详情
微软面试题求解:怎样只用4行代码编写出一个从字符串到长整形的函数?
drunkard
2001-05-12 02:51:00
写一个函数,检查字符串是否是整数,如果是,返回其整数值。
在《程序员》杂志2000年试刊1第38页曾提到,对这个问题,微软开发部主管加米尔仅写了4行程序就做出来了,请问他应该是怎么做的?
...全文
1199
63
打赏
收藏
微软面试题求解:怎样只用4行代码编写出一个从字符串到长整形的函数?
写一个函数,检查字符串是否是整数,如果是,返回其整数值。 在《程序员》杂志2000年试刊1第38页曾提到,对这个问题,微软开发部主管加米尔仅写了4行程序就做出来了,请问他应该是怎么做的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
63 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hproof
2001-09-08
打赏
举报
回复
long stol(char *&p,long &f)
{
long ret=0,s=f=-1;
for((*p=='-')?p++:s=1;*p<='9'&&*p>='0'&&(unsigned long)ret<=MAX_LONG/10;ret=ret*10-'0'+*(p++),f=0);
for(;*p<='9'&&*p>='0';p++,ret=-1);
return (ret<0)?f=s*MAX_LONG:s*ret
hproof
2001-09-08
打赏
举报
回复
我这个小东西的效果是这样的:
输入p 返回值 输出p 标志f 描述
--------------------------------------------------------------
"-001230#" -1230 "#" 0 正常
"abc123#" 0 "abc123" -1 非数值串
"10...00#" MAX_LONG "#" MAX_LONG 正溢出
"-0020..00#" -MAX_LONG "#" -MAX_LONG 负溢出
我认为效果还是不错的,因为它实用性比较大。比如:可以改变p使它指向下一个字符,可以根据标志位进行自己的处理,如果比在意的话,完全可以不考虑标志位,因为无论何时返回值都是有意义的。
代码如下:
#define MAX_LONG 0x8fffffff
long stol(char *&p,long &f)
{
long ret=0,s=f=-1;
for((*p=='-')?p++:s=1;
*p<='9'&&*p>='0'&&(unsigned long)ret<=MAX_LONG/10;
ret=ret*10-'0'+*(p++),f=0);
for(;*p<='9'&&*p>='0';p++,ret=-1);
return (ret<0)?f=s*MAX_LONG:s*ret;
}
widewave
2001-09-07
打赏
举报
回复
long strToLong(str *, n)
{
return ((n > 0)? (*str >= '1' && *str < '0')? (*str - '0'), 0) * 10 + strToLong(str++, n--), 0);
}
不怎么对.
higang
2001-09-07
打赏
举报
回复
int strtolong(char * str,long * ret)
{
int i,j,k,n;
for( i=j=k=n=0,*ret=0;(str!=NULL && ( (j=(*str>='0'&& *str<='9')) ||isspace(*str)||*str=='+'||(i=(*str=='-')) ))&&(!(j==0 && k==1));str++)
*ret= (j==1) ?(k=1,j=0,(*ret)*10+*str-'0'):0;
return(k==1?(i==1?*ret=-*ret:1):0);
}
可以处理
"dzxcvvcvc" -> 0 return 0 --失败
"0000120" -〉120 return 1 --成功
"0000-120" -> 0 return 0 --失败
"00+120" -> 0 return 0 --失败
" +000120 -> 120 retun 1
" -120" ->-120 return 1
"-000120" ->-120 return 1
"\t120\t " -> 120 return 1
不过
"120derfdsf" -> 120 return 1 !!!!
nemo2050
2001-08-31
打赏
举报
回复
对了使用的时候要将 b 设置为零。
nemo2050
2001-08-31
打赏
举报
回复
不知这个算不算, 总觉得写得太繁琐 :(
void StrToLong(char *a, long& b)
{
for(int i=10, j=1; i>=0 && (a[i]>='0'&&a[i]<='9'||a[i]=='-'); i--, j*=10)
(i==0&&a[0]=='-')?b-=b*2:b+=(a[i]-'0')*j;
}
nevsnev
2001-08-31
打赏
举报
回复
#include <stdio.h>
void str2l(const char *str,long *val);
int main()
{
char str[]=" -3278946";
int val = 0;
str2l(str,&val);
printf("val is %d\n",val);
return 0;
}
void str2l(const char *str,long *val)
{
int sig = 0;
while((*str == ' ')?(str++):0);
(*str == '+')?(str++,sig = 1):(*str == '-')?(str++,sig = -1):(sig = 1);
while((*str >= '0' && *str <= '9' && *str != '\0')?(*val = (*val*10) + (*str++-'0')*sig):(0L));
}
这里面只考虑了前面有空格,+、-号的情况,且符号后的字符串是理想的,
lyqof908
2001-08-29
打赏
举报
回复
高手
xmxmlt
2001-08-29
打赏
举报
回复
easy:
BOOL StrToInt( char *str, int *nInt )
{
*nInt = 0;
while( *str >= '0' && *str <= '9' )
*nInt += *nInt*10 + (*str++ -'0');
return *str?TRUE:FALSE;
}
newtoon2002
2001-08-28
打赏
举报
回复
gz
nasco
2001-08-28
打赏
举报
回复
无聊的题目,如果这是微软的面试题目也只能说这个项目组的代码质量绝对高不到什么地方去。
RipperJohn
2001-08-28
打赏
举报
回复
刚才搞错了,现在这个算么?
void atol(char* ch, long *l)
{
while(*ch>='0' && *ch<='9')
*l = (*l)* 10 + *(ch++) -'0';
}
RipperJohn
2001-08-28
打赏
举报
回复
朋友,这个算么?假设字串在ch[]里
long l=0;
int j=0;
while(ch[j]>='0' && ch[j]<='9')
l=l*10 + ch[j++] -'0';
cnss
2001-08-27
打赏
举报
回复
int f(char *str)
{
if(*str=='-')
return -f(++str);
for(int a = 0; *str < 58 && *str > 47; a = 10*a + *str - 48, str++);
return *str ? FALSE : a;
}
cnss
2001-08-27
打赏
举报
回复
刚才贴的不能识别负数,再贴一个,用递归解决了负数的识别
int f(char *str)
{
if(*str=='-')
return -f(++str);
for(int a = 0; *str != NULL && *str < 58 && *str > 47; a = 10*a + *str - 48, str++);
return *str ? -1 : a;
}
cnss
2001-08-27
打赏
举报
回复
只有两行,如果不是长整,返回-1,否则返回值
int f(char *str)
{
for(int a = 0; *str != NULL && *str < 58 && *str >47; a = 10*a + *str - 48, str++);
return *str ? -1 : a;
}
zhiqing
2001-08-27
打赏
举报
回复
不要有思维定势,一行可以写很多句.
jimgreen
2001-08-26
打赏
举报
回复
up
sjzhy
2001-08-25
打赏
举报
回复
for(i=0;i<strlen(str);i++)
if(!isdigit(str[i])||str[i]=='.')return false;
return atoi(str);
gzlucky
2001-08-24
打赏
举报
回复
function IsNumber( sStr as String ) as long
IsNumber = iif (trim(str(val(sStr))) = trim(sStr), val(sStr),-1)
end function
加载更多回复(43)
实验-三、数据库安全性(目的、要求和模板).doc
实验-三、数据库安全性(目的、要求和模板).doc
基于Docker搭建K8s集群离线包
基于Docker搭建K8s集群离线包,包含部署时所需的全部文件,可在内网环境中使用,K8s为1.23.0版本,docker为20.10.9-3版本
基于springboot+vue实现的求职招聘类型网站源
代码
+数据库(优质毕设项目).zip
基于springboot+vue实现的求职招聘类型网站源
代码
+数据库(优质毕设项目).zip个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运
行
! 基于springboot+vue实现的求职招聘类型网站源
代码
+数据库(优质毕设项目).zip个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运
行
! 基于springboot+vue实现的求职招聘类型网站源
代码
+数据库(优质毕设项目).zip个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运
行
!基于springboot+vue实现的求
基于Android系统Api封装常用工具类.zip
基于Android系统Api封装常用工具类.zip
基于PCA和SVM的人脸识别
svm 基于PCA(主成分分析)和SVM(支持向量机)的人脸识别是一种常见的方法。这里是
一个
简要说明: PCA(主成分分析): PCA是一种降维技术,它通过线性变换将高维数据转换为低维数据,同时保留最大的数据方差。 在人脸识别中,PCA被用来提取人脸图像中的主要特征,从而减少数据的维度,并保留最重要的信息。 SVM(支持向量机): SVM是一种监督学习算法,用于分类和回归分析。 在人脸识别中,SVM被用来构建
一个
分类器,以将提取的人脸特征映射到相应的人脸身份标签。 基于PCA和SVM的人脸识别流程: 训练阶段: 收集训练数据集,包括多个人的人脸图像和相应的标签。 对每个人脸图像应用PCA,将其转换为低维特征向量。 使用这些特征向量训练
一个
SVM分类器,使其能够将人脸特征向量与相应的人脸标签关联起来。 测试阶段: 对待识别的人脸图像应用相同的PCA转换,将其转换为与训练数据相同的低维特征向量。 使用训练好的SVM分类器,将待识别的人脸特征向量与已知的人脸标签进
行
比较,从而确定其身份。 优点: PCA可以有效地降低数据的维度,减少计算复杂度,并提取最相关的特征。 SVM在处理
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章