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

/* 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 基础 1.5 python 数据类型(一)--整型 浮点型 布尔型及字符串和常用方法

    一.python 数据类型:数值,字符串,列表,元组,字典.以下操作是在linux 下 ipython中进行 1.数值 1>123  与  “123”的区别 答:123为数值,“123”在pyt ...

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

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

  3. 九度OJ 1009:二叉搜索树 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6321 解决:2767 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需 ...

  4. struct对齐

    1 基本数据类型的自然对齐 就是说,基本数据类型的变量不能随便放在内存的任意位置,它们的起始地址必须被它们的大小整除. double是8个字节,float,int,enum是4字节,bool.char ...

  5. iOS SQLite使用

    数据库的特征: 以一定方式存储在一起 能为多个用户分享 具有尽可能少的冗余代码 与程序彼此独立的数据集 SQLite SQLite是一个轻量级关系数据库,最初的设计目标是用于嵌入式系统,它占用资源非常 ...

  6. win7怎么设置打印机共享

    一.设置好家庭组,让客户机加入家庭组 二.对服务机的打印机进行共享设置,如果保存不成功请在计算机服务那里打开防火墙 三.1.开启guest用户,具体操作:我的电脑右击---管理---本地用户和组--开 ...

  7. 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式

    在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...

  8. IOS 获取 文件(UIImage) 创建时间

    Image 在手机里 如果是手机拍的那么能使用ALAssetsLibrary获取一系列 图片的信息 颜色.GPS.尺寸.创建日期等 使用ALAssetsLibrary导入框架AssetsLibrary ...

  9. Windows编程MessageBox函数

    API: int MessageBox(HWND hWnd, LPCTSTRlpText, LPCTSTRlpCaption, UINTuType); MSDN描述: This function cr ...

  10. 《C prime plus (第五版)》 ---第11章 字符串和字符串函数---4

    字符串的例子: 1.字符串排序: 应用范围:准备花名册,建立索引以及很多情况下都会用刀字符串的排序.这个程序的主要工具就是strcmp(). 算法:读一个字符串数组,对它们进行排序并输出. #incl ...