工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat
对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面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的更多相关文章
- 转载 C++常用库函数atoi,itoa,strcpy,strcmp的实现
C++常用库函数atoi,itoa,strcpy,strcmp的实现 C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- 访谈将源代码的函数 strcpy/memcpy/atoi/kmp/quicksort
一.社论 继上一次发表了一片关于參加秋招的学弟学妹们怎样准备找工作的博客之后,反响非常大.顾在此整理一下,以便大家复习.好多源自july的这篇博客,也有非常多是我自己整理的.希望大家可以一遍一遍的写. ...
- 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort
http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...
- 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)
不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...
- 逆向 string.h 函数库 memset、strcpy、strcmp 函数
memset 函数 函数原型:void *memset(void *str, int c, size_t n) 主要功能:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符 ...
- atoi、itoa,strcpy,strcmp,memcpy等实现
原文:http://www.cnblogs.com/lpshou/archive/2012/06/05/2536799.html 1.memcpy.memmove.memset源码 link:http ...
- 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:①不包含字符串结束 ...
- 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 ...
随机推荐
- 苹果新政,禁止开发者在App中加入检查更新功能
今天妥妥的被拒了,苹果更新了新政策,不能在应用中出现检测更新的功能.AppStore会自动提醒用户更新. 去掉更新按钮,之后再尝试下看能通过不能
- C++中public、protected、private
C++中public.protected.private 第一:private, public, protected 访问标号的访问范围. private:只能由 1.该类中的函数. 2.其友元函数 ...
- C#计算某个时间距离当前日期的天数
方法一: DateTime dt1 = Convert.ToDateTime("2013-09-30"); DateTime dt2 = DateTime.Now; int cou ...
- jquery工具函数browser() 辨别浏览器
1.browser属性不是一个函数是一个全局对象,可以辨别客户端浏览器. 2.属性1:$.browser.msie如果返回true则客户端浏览器是ie.相似的$.browser.safari返回tru ...
- MYSQL一对多,两表查询合并数据
select a.askid,a.title,GROUP_CONCAT(b.message SEPARATOR '----') as content from gg_ask as a join gg_ ...
- window.location.href问题,点击,跳转到首页
onClick="window.location.href='./';" 点击,跳转到首页. location.href=url Js中实现跳转 window.location.h ...
- php防止sql注入函数
$magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes($_COOKIE)); @extract(daddslashes($_ ...
- MLlib-聚类
聚类 例子 流聚类 例子 聚类 MLlib支持k-means聚类,一种最常用的聚类方法,将数据点聚成指定数据的簇.MLlib实现了一种k-means++的并行变种,叫做kmeansII.MLlib的实 ...
- IOS笔记 1
< ![CDATA[ 笔记 UIWindows 与UIView的关系iOS的坐标系统视图层次结构视图坐标(Frame和Bounds区别)UIView的常用属性和方法坐标系统的变换UIView内容 ...
- (未解决)问题记录ionic android 签名之后安装到手机上点击运行出现闪退,不签名运行正常
Log日志如下: - ::): error opening trace ) - ::): FATAL EXCEPTION: main - ::): java.lang.RuntimeException ...