对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面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<arr[i])
{
right=i-1;
}
else
{
iResult=i;
break;
} } return iResult; }

strcat:

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

工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat的更多相关文章

  1. 转载 C++常用库函数atoi,itoa,strcpy,strcmp的实现

    C++常用库函数atoi,itoa,strcpy,strcmp的实现 C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. ...

  2. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  3. 访谈将源代码的函数 strcpy/memcpy/atoi/kmp/quicksort

    一.社论 继上一次发表了一片关于參加秋招的学弟学妹们怎样准备找工作的博客之后,反响非常大.顾在此整理一下,以便大家复习.好多源自july的这篇博客,也有非常多是我自己整理的.希望大家可以一遍一遍的写. ...

  4. 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort

    http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...

  5. 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)

    不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...

  6. 逆向 string.h 函数库 memset、strcpy、strcmp 函数

    memset 函数 函数原型:void *memset(void *str, int c, size_t n) 主要功能:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符 ...

  7. atoi、itoa,strcpy,strcmp,memcpy等实现

    原文:http://www.cnblogs.com/lpshou/archive/2012/06/05/2536799.html 1.memcpy.memmove.memset源码 link:http ...

  8. c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol

    这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的   1.strlen函数:计算目标字符串长度,    格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...

  9. strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr

    1.strcpy #include<stdio.h> #include<assert.h> char *mystrcpy(char *dest, const char *src ...

随机推荐

  1. windows7在局域网中无法映射驱动器问题解决

    昨天下班时闲的蛋疼,因电脑比较慢,因此在计算机的[系统配置中]的启动选项下对[启动项目]和[服务]做了误操作,导致在计算机重启之后声卡.显卡.网卡等许多服务禁用,更令人费解的是内网中断了连接,无法访问 ...

  2. eclipse打包jar时包含第三方jar包的相关问题

    我用的是mars4.5版本的eclipse 需求:要把写好的工程打成jar包,并能直接运行.工程用了若干个第三方jar. 在打包的时候,eclipse提供的打包方法不能引用第三方jar包,导致了出现C ...

  3. 解决 SQLSERVER 2008 无法删除作业

    SQLSERVER 2008 中删除作业时遇到无法删除 解决办法: USE [msdb] ) SET @job_name = N'JobName' --注:jobName为维护计划对应的jobName ...

  4. C#异常处理表、类、SQL

    表SQL /****** Object: Table [dbo].[IError] Script Date: 09/05/2012 17:00:41 ******/ SET ANSI_NULLS ON ...

  5. 用java写bp神经网络(一)

    根据前篇博文<神经网络之后向传播算法>,现在用java实现一个bp神经网络.矩阵运算采用jblas库,然后逐渐增加功能,支持并行计算,然后支持输入向量调整,最后支持L-BFGS学习算法. ...

  6. 【转】iOS Developer:真机测试

    摘要 申请真机调试证书全过程,最新更新:2014-05-19 2014-10-16记:由于现在 itunes 更新变化较大,本文可能不能很好地解决您的问题,而我现在不负责公司的发布调试问题,暂未及时更 ...

  7. js 日期修改

    很早之前在CSDN上发的博客,现在CSDN上得少了,就把这个转到园子里来 //重写toString方法,将时间转换为Y-m-d H:i:s格式 Date.prototype.toString = fu ...

  8. RB1001: IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常

    标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margi ...

  9. jQuery图片滑动

    一个非常简单实用的jQuery插件 可以用在页面的顶部广告展示 http://slidesjs.com/ 一个需要注意的问题, 就是在手机等客户端(IOS8以上), 使用此插件时, 经常会触发插件的r ...

  10. TalkingData游戏版本在Cocos2d-x 3.0使用

    Cocos2dx在3.0的版本中改动确实不少啊,所以导致原来可以在Cocos2.x版本上的demo都不能直接用,所以不得不重要写一个新的demo 但是TalkingData的库一直都是可以用的,只是之 ...