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

/* 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. libEasyPlayer RTSP windows播放器SDK API接口设计说明

    概述 libEasyPlayer实现对RTSP直播流进行实时采集和解码显示,稳定,高效,低延时:解码可采用intel硬件解码和软件解码两种方式,能实时进行录像和快照抓图,OSD叠加等功能. API接口 ...

  2. win7下搭建nginx+php的开发环境(转)

    在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目录下 ...

  3. ubuntu在vim里搜索关键字

    在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了. 如果你要继续查找此关键字,敲字符 n 就可以继续查找了.

  4. Why use async requests instead of using a larger threadpool?(转载)

    问: During the Techdays here in the Netherlands Steve Sanderson gave a presentation about C#5, ASP.NE ...

  5. 如何使用ipv6

    需要系统至少是Vista以上还有就是要问你们学校是否已经支持IPV6 从Windows Vista开始,IPv6在默认状态下已经安装并启用,无需额外配置.检测步骤开启浏览器窗口,输入以下域名访问本站首 ...

  6. BZOJ 3037 创世纪

    题解: 首先从基环树上的环上选两个点x,y 断开x,y之间的边,然后做树形DP. 设f[x]为选x的情况下的最大值,g[x]为不选x的情况下的最大值. 分两种情况讨论, 1.选x,则y一开始就处于被支 ...

  7. 重新实践c++primer上面的代码

    又重新敲了敲c++primer上面的代码,觉得很有意思,讲的很细,c++真牛逼啊 #include <iostream> #include <string> #include ...

  8. python二进制数据

    一直以来对python的二进制数据搞不清楚. 一.二进制显示格式与实际存储值区别 1.二进制数据在python中以字节(bytes)类型和字节数组类型(bytearray)保存着,前者数据固定,后者不 ...

  9. 初识Spacy

    之所以想接触Spacy,是看到其自称为工业级的应用,所以想尝试下 windows下安装Spacy:     直接安装pip install spacy是会报错的     解决方法:     到 htt ...

  10. C语言中数据类型和变量

    C语言中的数据类型 数据类型的本质,固定大小内存块的别名. 数组名代表数组首元素的地址. 数组首元素的地址,&代表整个数组的地址. 数组数据类型,怎么定义数据数组类型,定义数组类型指针,数组类 ...