使用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( ...
随机推荐
- libEasyPlayer RTSP windows播放器SDK API接口设计说明
概述 libEasyPlayer实现对RTSP直播流进行实时采集和解码显示,稳定,高效,低延时:解码可采用intel硬件解码和软件解码两种方式,能实时进行录像和快照抓图,OSD叠加等功能. API接口 ...
- win7下搭建nginx+php的开发环境(转)
在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目录下 ...
- ubuntu在vim里搜索关键字
在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了. 如果你要继续查找此关键字,敲字符 n 就可以继续查找了.
- 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 ...
- 如何使用ipv6
需要系统至少是Vista以上还有就是要问你们学校是否已经支持IPV6 从Windows Vista开始,IPv6在默认状态下已经安装并启用,无需额外配置.检测步骤开启浏览器窗口,输入以下域名访问本站首 ...
- BZOJ 3037 创世纪
题解: 首先从基环树上的环上选两个点x,y 断开x,y之间的边,然后做树形DP. 设f[x]为选x的情况下的最大值,g[x]为不选x的情况下的最大值. 分两种情况讨论, 1.选x,则y一开始就处于被支 ...
- 重新实践c++primer上面的代码
又重新敲了敲c++primer上面的代码,觉得很有意思,讲的很细,c++真牛逼啊 #include <iostream> #include <string> #include ...
- python二进制数据
一直以来对python的二进制数据搞不清楚. 一.二进制显示格式与实际存储值区别 1.二进制数据在python中以字节(bytes)类型和字节数组类型(bytearray)保存着,前者数据固定,后者不 ...
- 初识Spacy
之所以想接触Spacy,是看到其自称为工业级的应用,所以想尝试下 windows下安装Spacy: 直接安装pip install spacy是会报错的 解决方法: 到 htt ...
- C语言中数据类型和变量
C语言中的数据类型 数据类型的本质,固定大小内存块的别名. 数组名代表数组首元素的地址. 数组首元素的地址,&代表整个数组的地址. 数组数据类型,怎么定义数据数组类型,定义数组类型指针,数组类 ...