/* 为了面试准备的,有些在工作中也可以用用,本人算法方面比较欠缺,如果有更优秀的算法麻烦告诉我啊 */

/* strcat的实现 */

#include <assert.h>

char* my_strcat (char* strDest,const char* strSrc)

{

char *ret = strDest;

assert ((strDest != NULL)  &&  (strSrc != NULL));

while (*strDest != '\0')

{

strDest++;

}

while ((*strDest++ = *strSrc++) != '\0')

{

}

*strDest = '\0';

return ret;

}

/* strcpy的实现 */

#include <assert.h>

char* my_strcpy (char* strDest, const char* strSrc)

{

assert ((strDest != NULL) && (strSrc != NULL));

char* address = strDest;

while ((*strDest++ = *strSrc++) != '\0')

{

}

return address;

}

/* split的实现 */

int my_split (char *strOld, char **strNew)

{

assert ((strOld != NULL) && (strNew != NULL));

char *emp = *strNew;

int res = 0;

for (;;)

{

if ((*strOld >= '0') && (*strNew <= '9'))

{

int j = *strOld - '0';

res = res * 10 + j;

strOld++;

}

else if ((*strOld >= 'A') && (*strOld <= 'z'))

{

*emp++ = *strOld;

strOld++;

}

else

{

break;

}

}

return res;

}

/* strcmp的实现 */

int my_strcmp (const char *strDest, const char* strSrc)

{

while (*strDest)

{

if (*strDest != *strSrc)

{

return (*strDest - *strSrc) > 0 ? 1 : -1;

}

strDest++;

strSrc++;

}

if (*strDest)

{

return -1;

}

else

{

return 0;

}

}

/* string 转换为int */

int my_atoi (const char *str)

{

int result = 0;

int sign = 1;

if ('0' <= str[0] && str[0] <= '9' || (str[0] == '-') || (str[0] == '+'))

{

if (str[0] == '+' || str[0] == '-')

{

if (str[0] == '-')

{

sign = -1;

}

else

{

str++;

}

}

}

while (*str>='0' && *str<='9')

{

result = result * 10 + (*str - '0');

str++;

}

return result * sign;

}

/* int 转换为16进制 */

void my_itoa (char *buffer, unsigned int num)

{

int i;

unsigned int tmp;

buffer[0] = '0';

buffer[1] = 'x';

i = 9;

while (num)

{

tmp = num % 16;

if (tmp >= 10)

{

buffer[i] = tmp - 10 + 'A';

}

else

{

buffer[i] = tmp + '0';

}

i--;

num /= 16;

}

while (i >= 2)

{

buffer[i--] = '0';

}

buffer[10] = 0;

}

/* 字符串逆序 */

int str_reversed(char *str)

{

int i = 0;

char temp = 0;

char *ps;

char *pe;

if (!str)

{

return -1;

}

ps = a;

while (*a != 0)

{

a++;

}

pe = a;

for (i=0; i<(pe-ps)/2;i++)

{

temp = *(ps+i);

*(ps+i) = *(pe-i-1);

*(pe-i-1) = temp;

}

return 0;

}

/* 冒泡排序 */

void bubble_sort (int arr[], int size)

{

int i,j,flag,temp;

for (i=1; i<=size-1; i++)

{

flag = 0;

for (j=0; j<=size-i-1; j++)

{

if (arr[j] > arr[j+1])

{

flag = 1;

temp = arr[i];

arr[i] = arr[i+1];

arr[i+1] = temp;

}

if (flag == 0)

{

break;

}

}

}

}

/* 链表逆序*/

list reverse_list (list n)

{

if (!n)

{

return n;

}

list cur = n.next;

list pre = n;

list tmp;

pre.next = NULL;

while (NULL != cur.next)

{

tmp = cur;

tmp.next = pre;

pre = tmp;

cur = cur.next;

}

return tmp;

}

/* 判断是否是质数(素数) */

int is_prime (int n)

{

int i;

if (n < 2) return 0;

if (n == 2) return 1;

//判断时只需判断到n的开方即可

for (i=2; i*i<=n; i++)

{

if (n%i == 0) return 0;

}

return 1;

}

//打印小于num的所有素数

void print_prime (int num)

{

int i = 2;

if (num >= 2)

{

printf ("%d",i);

}

//去除偶数

for (i=3; i<num; i+=2)

{

if (is_prime(i))

{

printf ("%d",i);

}

}

}

/* 递归题 */

//阶乘

int mul (int num)

{

if (num == 1) return 1;

return num*mul(num-1);

}

//斐波那契数列

int fei (int num)

{

if (num==0 || num==1) return num;

return f(num-1) + f(num-2);

}

/* 全局变量模拟栈操作 */

#include <stdio.h>

#include <stdbool.h>

int INDEX;

int data[20];

//入栈

bool push(int d)

{

if (INDEX >= 20)return false;

data[INDEX++] = d;

return true;

}

//出栈

int pop()

{

return data[--INDEX];

}

//返回栈顶

int peak()

{

return data[INDEX-1];

}

//判断栈是否空

bool empty()

{

if (INDEX <= 0) return true;

return false;

}

使用c语言实现的常用函数的更多相关文章

  1. C语言中字符串常用函数--strcat,strcpy

    strcpy 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 功能:把从src ...

  2. C语言string.h常用函数总结

    void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. ...

  3. go语言学习 strings常用函数

    strings包中的函数用法 参考链接http://studygolang.com/articles/88 1.strings.replace() 函数原型 func Replace(str1, ol ...

  4. C语言中的常用函数_持续更新

    isspace函数: 背景:之前遇到scanf()输入时会把换行符留在输入队列的情况,如果下次要用到getchar(),但是会导致其先返回这个我们不需要的换行符:从而导致不希望出现的行为: 说明:检查 ...

  5. C语言图形界面常用函数集锦

    (以下函数均应在图形方式初始之后使用(initgraph(a,b)),在win-tc中使用BGI图形程序模板时,其中已经定义有一个initgr函数,在main函数中应在执行initgr函数之后再使用这 ...

  6. R语言描述性统计常用函数

  7. 【R】R语言常用函数

    R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或 ...

  8. go语言之进阶篇字符串操作常用函数介绍

    下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 一.字符串操作常用函数介绍 1.Contains func Contains(s, substr st ...

  9. Mysql常用函数,难点,注意

    一.数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)   返回大于x的最小整数值 EXP(x)   返回值e( ...

随机推荐

  1. HIbernate 级联删除

    在一对多的情形下如 Cinema - > Screen; 1.正常在不设置级联(casCade)的情况下 删除一的一方(Cinema)会报外键关联异常 (Screen 中包含Cinema的外键) ...

  2. struts2的 defalut-action-ref 的使用

    这个配置的用法有值得注意的地方,所以才记录下来: 一般default-action-refer配置的action是在浏览器中输入的网址只输入到项目时或输入错误的action时 所进入的action,一 ...

  3. 【C#图解】PictureBox.SizeMode 属性(转)

    PictureBoxSizeMode.Normal: 默认情况下,在 Normal 模式中,Image 置于 PictureBox 的左上角,凡是因过大而不适合 PictureBox 的任何图像部分都 ...

  4. c++中的重载、覆盖和隐藏

    1 重载发生在同一个类内部. 同一个类内部,具有相同的函数名,但是参数列表不同,那么就是重载.因为c++编译器编译时,将函数名和函数列表一起对函数进行了重命名. 2 覆盖和隐藏发生在子类和父类之间. ...

  5. 4.Web工程师的开发工具箱

    第四章 效率工具ShadowSocks window代理服务器FalconProxy chrome代理服务器stackoverflow.com Stack Overflow是一个与程序相关的IT技术问 ...

  6. POJ - 1611 The Suspects 【并查集】

    题目链接 http://poj.org/problem?id=1611 题意 给出 n, m 有n个人 编号为 0 - n - 1 有m组人 他们之间是有关系的 编号为 0 的人是 有嫌疑的 然后和 ...

  7. ZOJ - 3862 Intersection 【贪心】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3862 思路 因为交换次数达到 n + 10 其实我们可以先将他们 ...

  8. [egret+pomelo]实时游戏杂记(1)

    [egret+pomelo]学习笔记(1) [egret+pomelo]学习笔记(2) [egret+pomelo]学习笔记(3) 资料 egret pomelo pomelo捡宝项目 准备工作 1. ...

  9. 简易html5贪吃蛇

    1. [图片] E6~0%QPA46ER843UQJ$0Z`H.jpg ​2. [文件] snake.html <!DOCTYPE html><html><head> ...

  10. chrome浏览器常用快捷键

    chrome浏览器常用快捷键 一.总结 一句话总结: Ctrl + j:打开“下载内容”页 Ctrl + t:打开新的标签页,并跳转到该标签页 Ctrl + d:将当前网页保存为书签 1.在新标签页中 ...