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

/* 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. python 基础 2.8 python练习题

    python 练习题:   #/usr/bin/python #coding=utf-8 #@Time   :2017/10/26 9:38 #@Auther :liuzhenchuan #@File ...

  2. 如何理解API,API 是如何工作的

    大神博客:https://blog.csdn.net/cumtdeyurenjie/article/details/80211896

  3. mongo数据库中一条记录中某个属性是数组情形时 数据结构的定义

    package entity; import java.util.Date; import com.mongodb.BasicDBList;import com.mongodb.DBObject; p ...

  4. with(nolock) 与 with(readpast) 与不加此2个的区别

    调试窗口一: 或者查询窗口一: 总之:事务没有结束 查询窗口二:

  5. DAICO模式到底是什么?

    自从V神提出DAICO以来,已经有项目围绕DAICO模式落地,但是DAICO到底是什么呢? 所谓DAIC0,其实就是DAO+IC0. DAO是DistributedAutonomous Organiz ...

  6. 【转】数据存储——APP 缓存数据线程安全问题探讨

    http://blog.cnbang.net/tech/3262/ 问题 一般一个 iOS APP 做的事就是:请求数据->保存数据->展示数据,一般用 Sqlite 作为持久存储层,保存 ...

  7. SDUT OJ 河床

    河床 Time Limit: 3000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 地理学家们经常要对一段河流进行测量分析.他们从上游开始向下游方向等距离地选择 ...

  8. Strom 消息处理机制 中英对照翻译 (Storm如何保证消息被完全处理)

    官方链接: http://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html What does ...

  9. ubuntu安装 LNMP+redis

    一.更新软件源 1.修改软件源为163的源 sudo vim /etc/apt/sources.list 替换源为163的源: deb http://mirrors.163.com/ubuntu/ i ...

  10. Windows内存性能分析(二)性能瓶颈

    内存瓶颈: 由于可用内存缺乏导致系统性能下降的现像. (一).相关的性能对象 主要考虑内存的页面操作和磁盘的I/O操作,需要考虑如下性能对象: Memory性能对象: 用于分析整个系统的内存瓶颈问题. ...