zoukankan      html  css  js  c++  java
  • 使用c语言实现的常用函数

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

    /* strcat的实现 */

    #include <assert.h>

    char* my_strcat (char* strDest,const char* strSrc)

    {

    char *ret = strDest;

    assert ((strDest != NULL)  &&  (strSrc != NULL));

    while (*strDest != '')

    {

    strDest++;

    }

    while ((*strDest++ = *strSrc++) != '')

    {

    }

            *strDest = '';

    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++) != '')

    {

    }

    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;

    }

  • 相关阅读:
    Leetcode 217 存在重复
    Leetcode 125验证回文串
    HTML标签
    Having dreams is what makes life tolerable.
    Database数据库——MySQL简述
    Python实践之路8——选课系统
    Python学习之路16——线程、进程和协程
    Python实践之路7——计算器
    Python学习之路14——Socket
    Python学习之路13——异常处理
  • 原文地址:https://www.cnblogs.com/etangyushan/p/3679450.html
Copyright © 2011-2022 走看看