/* 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. 释放c盘空间

    Win7的系统引导盘用着用着会越来越小.怎么办呢?我以前在网上查过资料,说是找个工具加大C盘.我加了,从原来的20G加到现在的35G.用了一段时间后,空间又只剩几百M了.难道又要加?? 后来,在网上找 ...

  2. 解析Infopath生成的XSN结构

    解析Infopath生成的XSN结构 解压XSN文件,得到下图文件 Infopath包括xsl.xsd.xsf.xml文件格式 Manifest.xsf是infopath的主要集合文件,包含对其他各个 ...

  3. D8

    =-=昨天被老师拉去吃点心了就没有发题解...忧伤..昨天的T2貌似都没有调完嗯 今天脑洞是大啊.. T1模拟写挂..呵呵我一面 T2数学题..刚开始只会求素数表的那种方法暴力..不过后面他们都知道一 ...

  4. GNU Make 学习系列一:怎样写一个简单的Makefile

    编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...

  5. ResolveUrl in ASP.NET - The Perfect Solution

    原文:ResolveUrl in ASP.NET - The Perfect Solution If you are looking for ResolveUrl outside of Page/Co ...

  6. UML和模式

    UML和模式应用学习笔记-2(迭代和进化式开发)   一:什么是迭代和进化式开发 1:迭代和进化式开发:通常会在还没有详细定义所有需求的情况下假设开发开始,同时使用反馈来明确和改进演化中的规格说明: ...

  7. 企业架构与建模之使用ArchiMate进行分析

    企业架构与建模之使用ArchiMate进行分析(全系列完) 4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局 ...

  8. [整理]在命令行执行 UIAutomation

    instruments -t /Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/Automati ...

  9. 安装使用yii-debug-toolbar,yii框架的调试插件

    1github 下载yii-debug-toolbar 插件 地址:https://github.com/malyshev/yii-debug-toolbar 2. 假设yii的项目创建在了/expo ...

  10. 我的API HOOK库

    API HOOK有两种做法,一种是SetWindowHookEx,简单易用,但如果做其它的HOOK,如HOOK OpenProcess,就需要修改内存地址了,内存地址可以通过WriteProcessM ...