使用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( ...
随机推荐
- git拉取远程分支到本地分支或者创建本地新分支
git fetch origin branchname:branchname 可以把远程某各分支拉去到本地的branchname下,如果没有branchname,则会在本地新建branchname g ...
- 为什么需要onRoute函数?
为什么需要onRoute函数? · Tencent/wepy Wiki https://github.com/Tencent/wepy/wiki/%E4%B8%BA%E4%BB%80%E4%B9%88 ...
- client网络优化方法
减小图片大小(使用WebP格式的图片) 大部分的Facebook应用数据都是图片,因此降低图片的大小就能够较少数据的下载量.从而加快下载速度,这一点在高延迟的网络环境下很重要.Facebook返回给 ...
- LeetCode:访问所有节点的最短路径【847】
LeetCode:访问所有节点的最短路径[847] 题目描述 给出 graph 为有 N 个节点(编号为 0, 1, 2, ..., N-1)的无向连通图. graph.length = N,且只有节 ...
- JVM性能分析工具详解--MAT等
获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...
- iOS SDK:iOS调试技巧
感谢原创 在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部分.通过本文的学习,我们将知道在程序中,可以使用 ...
- spring 路径配置通配符是如何实现的
在spring的配置文件中.经常看见类似这样的配置路径: classpath:/com/module/**/*sql.xml 系统会根据配置路径自动加载符合路径规则的xml文件. Spring还提供了 ...
- joomla搬家之后打不开 首页404错误
joomla 安装好之后, 网站打不开,首页404错误,后台能够正常访问,数据库连接正常.应该是 nginx配置的问题.该如何修改配置呢?随便一个链接点进去都是404,找不到页面,URL的形式如下: ...
- R语言快捷键
一.控制台 功能 Windows & Linux Mac 移动鼠标到控制台 Ctrl+2 Ctrl+2 移动到鼠标命令编辑 Ctrl+1 Ctrl+1 控制台清屏 Ctrl+L Comm ...
- HDU 4652 Dice:期望dp(成环)【错位相减】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后 ...