使用c函数实现的常用函数

来源:互联网 发布:如何带领团队 知乎 编辑:程序博客网 时间:2024/06/07 10:10

  /* strcat的实现 */

  #include

  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

  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

  {

  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

  #include

  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;

  }

 

0 0
原创粉丝点击