工作的准备: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 ...
随机推荐
- Android开发手记(23) Notification
有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用Notification来完成这一工作.也许我们会想到以前经常使用的Toast来通知用户.虽然Notification与Toast都 ...
- Java面向对象的概念以及OOP思想的优点
传统面向过程程序设计的思路: 先设计一组函数用来解决一个问题,然后确定函数中需要处理的数据以及存储位置. 面向对象的设计的思路: 先确定处理的数据,然后确定处理数据的算法,最后将数据和算法封装在一起构 ...
- exist的用法
http://blog.csdn.net/maladoufu/article/details/8194624 http://blog.csdn.net/xiwu1616/article/details ...
- php 时间戳 总结 今日,昨日,上周,本周,最近三个月,上季,本季,去年,最近七天,今年,最近三十天
if($time=="今日"){ $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime ...
- [Head First设计模式笔记]----命令模式
命令模式定义:将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 类图: 适用设计方案举例:实现一种遥控器,该遥控器具有七个可编程的插槽(每个都可以指 ...
- 二叉树中序遍历 (C语言实现)
在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构.二叉树是每个节点最多有两个子树的有序树.通常子树被称作“左子树”(left subtre ...
- java计算一个月有多少天和多少周
import java.util.Calendar; /** * 功能概述:计算指定年月的天数和周数<br> * 创建时间:2010-5-17 下午05:25:58<br> * ...
- mysql操作之二
特殊数据类型 表约束 表连接 索引 触发器 安全性 DB设计 alter table student modify id int primary key; 主銉不可重复修改 alter table s ...
- mongodb 教程一
mongodb是nosql(not only sql)的一种方式 .是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL - 代表着不仅仅是SQL- 没有声明性查询语言- 没有预定义的模式 ...
- Fireworks Extension —— AutoSlice 介绍
前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...