使用c语言实现的常用函数
/* 为了面试准备的,有些在工作中也可以用用,本人算法方面比较欠缺,如果有更优秀的算法麻烦告诉我啊 */
/* 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语言实现的常用函数的更多相关文章
- C语言中字符串常用函数--strcat,strcpy
strcpy 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 功能:把从src ...
- C语言string.h常用函数总结
void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. ...
- go语言学习 strings常用函数
strings包中的函数用法 参考链接http://studygolang.com/articles/88 1.strings.replace() 函数原型 func Replace(str1, ol ...
- C语言中的常用函数_持续更新
isspace函数: 背景:之前遇到scanf()输入时会把换行符留在输入队列的情况,如果下次要用到getchar(),但是会导致其先返回这个我们不需要的换行符:从而导致不希望出现的行为: 说明:检查 ...
- C语言图形界面常用函数集锦
(以下函数均应在图形方式初始之后使用(initgraph(a,b)),在win-tc中使用BGI图形程序模板时,其中已经定义有一个initgr函数,在main函数中应在执行initgr函数之后再使用这 ...
- R语言描述性统计常用函数
- 【R】R语言常用函数
R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或 ...
- go语言之进阶篇字符串操作常用函数介绍
下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 一.字符串操作常用函数介绍 1.Contains func Contains(s, substr st ...
- Mysql常用函数,难点,注意
一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e( ...
随机推荐
- HIbernate 级联删除
在一对多的情形下如 Cinema - > Screen; 1.正常在不设置级联(casCade)的情况下 删除一的一方(Cinema)会报外键关联异常 (Screen 中包含Cinema的外键) ...
- struts2的 defalut-action-ref 的使用
这个配置的用法有值得注意的地方,所以才记录下来: 一般default-action-refer配置的action是在浏览器中输入的网址只输入到项目时或输入错误的action时 所进入的action,一 ...
- 【C#图解】PictureBox.SizeMode 属性(转)
PictureBoxSizeMode.Normal: 默认情况下,在 Normal 模式中,Image 置于 PictureBox 的左上角,凡是因过大而不适合 PictureBox 的任何图像部分都 ...
- c++中的重载、覆盖和隐藏
1 重载发生在同一个类内部. 同一个类内部,具有相同的函数名,但是参数列表不同,那么就是重载.因为c++编译器编译时,将函数名和函数列表一起对函数进行了重命名. 2 覆盖和隐藏发生在子类和父类之间. ...
- 4.Web工程师的开发工具箱
第四章 效率工具ShadowSocks window代理服务器FalconProxy chrome代理服务器stackoverflow.com Stack Overflow是一个与程序相关的IT技术问 ...
- POJ - 1611 The Suspects 【并查集】
题目链接 http://poj.org/problem?id=1611 题意 给出 n, m 有n个人 编号为 0 - n - 1 有m组人 他们之间是有关系的 编号为 0 的人是 有嫌疑的 然后和 ...
- ZOJ - 3862 Intersection 【贪心】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3862 思路 因为交换次数达到 n + 10 其实我们可以先将他们 ...
- [egret+pomelo]实时游戏杂记(1)
[egret+pomelo]学习笔记(1) [egret+pomelo]学习笔记(2) [egret+pomelo]学习笔记(3) 资料 egret pomelo pomelo捡宝项目 准备工作 1. ...
- 简易html5贪吃蛇
1. [图片] E6~0%QPA46ER843UQJ$0Z`H.jpg 2. [文件] snake.html <!DOCTYPE html><html><head> ...
- chrome浏览器常用快捷键
chrome浏览器常用快捷键 一.总结 一句话总结: Ctrl + j:打开“下载内容”页 Ctrl + t:打开新的标签页,并跳转到该标签页 Ctrl + d:将当前网页保存为书签 1.在新标签页中 ...