/* strcpy函数实现 拷贝字符串 */
char* Strcpy(char* dst, char* src)
{
assert(dst != NULL && src != NULL); // 断言 dst和src不能为NULL char* dst_address = dst; // 保存目的地址 while((*(dst++) = *(src++)) != '\0')
{
/* do nothing */
} return dst_address; // 返回目的地址 允许链式表达式
} /* strncpy函数实现*/ char* Strncpy(char* dst, const char* src, size_t num)
{
assert(dst != NULL && src != NULL); // 断言 dst和src不能为NULL char* dst_address = dst; size_t i = ; // 控制复制的个数
while(i++ < num && (*dst++ = *src++) != '\0')
{
/* do nothing */
} if(*dst != '\0') // 字符必须以'\0'结尾
{
*dst = '\0';
} return dst_address;
} size_t Strlen(const char *str)
{
assert(str != NULL); int count = ; while(*str++ != '\0')
{
++count;
} return count;
} void* Memcpy( void *dest, const void *src, size_t count )
{
assert(dest != NULL && src != NULL); char* _dest = (char*)dest;
char* _src = (char*)src; while (count--)
{
*_dest++ = *_src++;
} return dest;
} void * Memmove ( void * destination, const void * source, size_t num )
{
char* _dst = NULL;
char* _src = NULL; if(destination <= source)
{
_dst = destination;
_src = source; while (num--)
{
*_dst++ = *_src++;
}
}
else
{
_dst = destination;
_src = source; _dst += num;
_src += num; while (num--)
{
*--_dst = *--_src;
}
}
}
 int FibonacciSequence(unsigned int n)
{
if( == n || == n)
{
return n;
}
else
{
return FibonacciSequence(n-)+FibonacciSequence(n-);
}
}
 int BinSearch(int* arr, int left, int right, int key)
{
if(!arr)
{
return -;
} while (left <= right)
{
int mid = left + ((right - left) >> ); if(arr[mid] < key)
{
left = mid + ;
}
else if(arr[mid] > key)
{
right = mid - ;
}
else
{
return mid;
}
}
return -;
}
 // 插入排序
void InsertionSort(int* arr, int len)
{
for(int j = ; j < len; ++j)
{
int i = j - ;
int key = arr[j]; while(i >= && a[i] > key)
{
a[i+] = a[i];
--i;
}
arr[i+] = key;
}
}
 int Partition(vector<int>& vec, int low, int up)
{
int pivot = vec[up];
int i = low - ; for(int j = low; j < up; ++j)
{
if(vec[i] < pivot)
{
++i;
std::swap(vec[i], vec[j]);
}
}
std::swap(vec[i+], vec[up]); return i+;
} void QuickSort(vector<int>& vec, int low, int up)
{
if(low < up)
{
int mid = Partition(vec, low, up); QuickSort(vec, low, mid - );
QuickSort(vec, mid + , up);
}
} void Sort(vector<int>& vec)
{
QuickSort(vec, , vec.size() - );
}
template <typename T>
int BinSearch(std::vector<T>& array, T key)
{
int left = ;
int right = array.size(); while (left < right)
{
int mid = (left + right) >> ; // 中点 if (array[mid] < key)
{
left = mid;
}
else if (key < array[mid])
{
right = mid;
}
else
{
return mid;
}
} return -; // 查找失败
}

c/c++笔试面试经典函数实现的更多相关文章

  1. 2. C/C++笔试面试经典题目二

    1. C和C++中struct有什么区别? [参考答案] [解析]C中的struct没有保护行为,没有public,private,protected,内部不能有函数,但可以有函数指针. 2. C++ ...

  2. 1. C/C++笔试面试经典题目一

    1. 不用循环和递归,实现打印数字0到999. #include <iostream> #include<stdio.h> using namespace std; #defi ...

  3. 3. C/C++笔试面试经典题目三

    64. 如何打印出当前源文件的文件名以及源文件的当前行号? [参考答案]cout << __FILE__ ; cout<<__LINE__ ; __FILE__和__LINE_ ...

  4. 找工作笔试面试那些事儿(8)---常问的CC++基础题

    这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...

  5. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  6. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  7. catalan数及笔试面试里那些相关的问题(转)

    一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...

  8. go golang 笔试题 面试题 笔试 面试

    go golang 笔试题 面试题 笔试 面试 发现go的笔试题目和面试题目还都是比较少的,于是乎就打算最近总结一下.虽然都不难,但是如果没有准备猛地遇到了还是挺容易踩坑的. 就是几个简单的笔试题目, ...

  9. 面试经典算法题集锦——《剑指 offer》小结

    从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...

随机推荐

  1. [Usaco2008 Mar]River Crossing渡河问题[简单DP]

    Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,F ...

  2. 文本框文字垂直居中 CSS

    <html> <head> <style type="text/css"> #text { height:20px; vertical-alig ...

  3. 关于ADB server didn't ACK * failed to start daemon *的问题

    查看5037端口被谁占用了, 开始--运行--CMD 到命令提示符,输入 netstat -aon|findstr "5037" 输入 tasklist|findstr " ...

  4. 顺手的Linux发行版及其工具推荐

    从Windows切换到Linux已经有半年多的时间了,简单给大家推荐一些个人感觉不错的软件,主要都是和开发相关的通用软件--- 0.archlinux  挑一个比较顺手的linux发行版当然是首要任务 ...

  5. 揭开redis神秘面纱

    一直听别人说NoSQL,以前一直不明白,这到底是什么东西,今天听过我们涛哥的讲解,略有小感,特此小记. NoSQL(NoSQL = Not Only SQL),意为反SQL运动,是一项全新的数据库革命 ...

  6. 竞价广告系统-ZooKeeper介绍

    ZooKeeper介绍 为了讲述的完整性,介绍一下ZooKeeper.ZooKeeper在Index和Ad Server里使用比较多,虽然它可能没有google的Chubby好,但它是开源的工具.举一 ...

  7. DDD:四色原型中Role的 “六” 种实现方式和PHP的Swoole扩展

    目录 背景六种实现方式第一种:未显式体现角色的模式.第二种:使用“显式接口”显式体现角色的模式.第三种:使用“扩张方法”显式体现角色的模式.第四种:使用“领域服务”显式体现角色的模式.第五种:使用“包 ...

  8. 数据结构之树(Tree)(一) :树

    ps:好久没用动手写blog了,要在这条路上不断发展,就需要不停的学习,不停的思考与总结,当把写blog作为一种习惯,就是自我成长的证明,Fighting!. 一.简介 树是一种重要的非线性数据结构, ...

  9. Android 手机进入不了fastboot模式的解决方案

    本方案仅针对linux terminal下刷手机img文件的情况: fastboot的通常流程如下:   adb reboot bootloader  //进入bootloader 模式  fastb ...

  10. POJ 3348 Cows

    题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...