对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面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. class-loader.

    the jdk hierarchical relationship of class-loader ----Module Class Loading and Bootstrapping---- boo ...

  2. 想加入一行代码吗?使用<code>标签

    在介绍语言技术的网站中,避免不了在网页中显示一些计算机专业的编程代码,当代码为一行代码时,你就可以使用<code>标签了,如下面例子: <code>var i=i+300;&l ...

  3. 记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程

     1:问题 集成第三方的ocx控件,用来做pdf显示和签名.如果用窗口化插件做,很简单,加载ocx到窗口中,再显示到网页即可.但这样有个缺点.就是这个窗口会浮动在网页元素的上面,导致遮挡住网页元素.比 ...

  4. BroadcastReceiver监听电量变化

    用BroadcastReceiver监听电量的变化,可以实现BroadcastReceiver接收电量变化的广播,然后获取电量百分比信息. BatteryChangedReceiver.java pu ...

  5. GitHub-修改以下host-ip可加快访问速度

    #GitHub START 207.97.227.239    github.com 204.232.175.94    gist.github.com 107.21.116.220    help. ...

  6. 我的vimrc配置

    fankcoder@fankcoder:~$ cat ~/.vimrclet Tlist_Auto_Highlight_Tag=1 let Tlist_Auto_Open=1 let Tlist_Au ...

  7. 将与系统时间格式不同的字符串格式化为DATETIME类型

    若系统时间格式为2012/03/05 08:12:12,那么若将("2012-03-05 08:12:12")格式化为时间变量时会报错,在转化之前先将系统时间格式改变再转换就不会报 ...

  8. mysql的sql优化案例

    前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...

  9. Scut:通用配置管理器

    1. 配置节 ConfigSection private List<ConfigNode> _configNodes; public class ConfigNode { public C ...

  10. Xcode 快捷键-b

    0.跳到指定行command + L; 1.配置高亮方案:Fonts & Colors 2.键盘快捷键:Key Bindings 3.代码缩进:Re-indent selection.(快捷键 ...