博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat
阅读量:6600 次
发布时间:2019-06-24

本文共 2340 字,大约阅读时间需要 7 分钟。

对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面n届学长无数次强调了,大家就别怀疑了。从今天开始,每天10道题。

         

int atoi(const char* str){	if(str==NULL) return 0;    bool sigFlag=true;    int i=0;	int sum=0;while(str[i]!='\0'){	if(str[i]=='+')		sigFlag=true;	else if(str[i]=='-')		sigFlag=false;	else if(str[i]<='9'&&str[i]>='0')	{	 sum=sum*10+str[i]-'0';		}	else	{	 	}i++;}if(sigFlag==false)  sum=0-sum;return sum;}

以上的有几个要点没注意到,一是没检测溢出,而是没处理好空格,三是诸如a34d5之类的字符串没处理好。

 

 

改进后如下:

int atoi(const char* str)  {      if(str==NULL) return 0;      bool sigFlag=true;      int i=0;      int sum=0;      while(str[i]==' ') i++;    while(str[i]!='\0')     {      if(str[i]=='+')          sigFlag=true;      else if(str[i]=='-')          sigFlag=false;        else if(str[i]<='9'&&str[i]>='0')      {       sum=sum*10+str[i]-'0';  	 if((sigFlag && sum>0x80000000)||(!sigFlag && sum>0x7fffffff ))	 {		 sum=0;	   break;	 }    }      else      {       break;         }  i++;  }  if(sigFlag==false)    sum=0-sum;  return sum;      }

 

itoa:

char* itoa(int inputInt){     if(inputInt<0)   inputInt=0-inputInt;   int num=inputInt;      int i=0;   while(inputInt/=10)      i++;   char* p=new char[i+2];   int j=0;   int tmp;   do   {     p[j++]=num%10+'0';    num=num/10;   }while(num);   p[j+1]='\0';      for(int k=0;k<(i+1)/2;++k)   {	   tmp=p[k];	   p[k]=p[i-k];	   p[i-k]=tmp;      }delete []p;return p;}

strcpy:

void Strcpy(char* dstStr,const char* srcStr){	if(srcStr==NULL||srcStr==NULL)return;	while(*dstStr++=*srcStr++){}}

memcpy:

void Memcpy(void* pmemTo,const void* pmemFro,int count)
{
if(pmemTo==NULL||pmemFro==NULL) return;
char* pbTo=(char*)pmemTo;
char* pbFro=(char*)pmemFro;
while(count)
{
*pbTo++=*pbFro++;
count--;
}
}

 

 

  strCmp:

 

int strCmp(const char* dstStr,const char* srcStr){	assert(dstStr!=NULL&&srcStr!=NULL);	while(*dstStr++==*srcStr++ && *dstStr!='\0')			return *dstStr-*srcStr;   }

 

 

 

二分查找:

 

int BinarySearch(int* arr,int n,int key) {   assert(arr!=NULL);   int left,right;   left=0;   right=n-1;   int i=0;   int iResult=-1;      while(true)   {	   i=(right-left)/2;     if(right-left==0)	 {        if(key==arr[left]) 		{			iResult=left;	       		}		 break;	 }	 else if(key>arr[i])	 {	   left=i+1;	 }	 else if(key

strcat:

 

 

 

char* StrCat(char* dstStr,const char* srcStr) {	 char* strResult=dstStr;   while(*dstStr++!='\0')   {}   dstStr--;   while(*dstStr++=*srcStr++);   return strResult;  }

 

 

 

转载地址:http://ykmio.baihongyu.com/

你可能感兴趣的文章
iOS - 多链式动画框架 LSAnimator
查看>>
Android 反编译利器,jadx 的高级技巧
查看>>
Mycat 读写分离 数据库分库分表 中间件 安装部署
查看>>
output配置说明
查看>>
二叉搜索树(递归实现)
查看>>
Spring Retry重试机制
查看>>
Android官方架构组件LiveData: 观察者模式领域二三事
查看>>
第七章——字符串(不定长度字符)
查看>>
Cocoapods 创建第三方框架
查看>>
从0到1使用Kubernetes系列——Kubernetes入门
查看>>
[Android组件化]组件化数据分享
查看>>
# Ruby 数据抓取写入 xls (unirest, nokogiri, spreadsheet)
查看>>
[转]23个最有用的Elasticsearch检索技巧
查看>>
你必须知道的HTTP基本概念
查看>>
当下拉列表数据过大时,该如何应对?
查看>>
使用OpenGrok搭建 可搜索可跳转的源码 阅读网站
查看>>
HTML5开发中的javascript闭包
查看>>
[译] 如何使用 HTTP Headers 来保护你的 Web 应用
查看>>
Android ContentProvider调用报错"Bad call:..."及相关Binder权限问题分析
查看>>
你真的会用strong-weak dance吗?
查看>>