字符函数和字符串函数的使用及模拟实现(上)(2)

简介: 字符函数和字符串函数的使用及模拟实现


多增加了一个字节个数,即拷贝几个字节,更加有了限制


这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!


6.strncat

多增加了一个字节个数,即追加几个字节,更加有了限制


这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!

 

7.strncmp

多增加了一个字节个数,即比较几个字节,更加有了限制

这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!

二、模拟实现

1.strlen

代码如下(示例):

法一:计数器方式

#include<stdio.h>
#include<assert.h>
int my_strlen(char* p)
{
  assert(str);   //防止str为空指针
  int count = 0;
  while (*p++)
  {
    count++;
  }
  return count;
}
int main()
{
  char arr[] = "abcdef";
  int ret = my_strlen(arr);
  printf("%d", ret);
    return 0;
}

法二:递归,不创建临时变量

#include<stdio.h>
#include<assert.h>
int my_strlen(char *str)
{
  if (*str== '\0')
  {
    return 0;
  }
  else
  {
    return my_strlen(str+1) + 1;
  }
}
int main()
{
  char arr[] = "abcdef";
  int ret = my_strlen(arr);
  printf("%d", ret);
}

法三:指针减指针

#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
  char* p = str;
  while (*p!= '\0')
  {
    p++;
  }
  return p - str;
}
int main()
{
  char arr[] = "abcdef";
  int ret = my_strlen(arr);
  printf("%d", ret);
}

2.strcpy

代码如下(示例):

#include<stdio.h>
#include<assert.h>
char * my_strcpy(char* dest, const char* src)
{
  assert(dest && src);
  char* p = dest;
  while (*dest++ = *src++);
return p;
}
int main()
{
  char arr1[] = "aaaaaaaaa";
  char arr2[] = "bbbbbbbb";
  my_strcpy(arr1,arr2);
  printf("%s", arr1);
}

3.strcat

代码如下(示例):

先找斜杠零,再拷贝.

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,const char* src)
{
  char* p = dest;
  assert(dest && src);
  while (*dest)
  {
    dest++;
  }
  while (*dest++ = *src++);
  return p;
}
int main()
{
  char arr1[20] = "aaaaaa";
  char arr2[] = "bbbbbbbb";
  my_strcat(arr1,arr2);
  printf("%s", arr1);
  return 0;
}

4.strcmp

代码如下(示例):

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
  assert(str1 && str2);
    //法一
  while (*str1)
  {
    while (*str1 != *str2)
    {
      return *str1 - *str2;
    }
    str1++;
    str2++;
  }
  return 0;
    //法二
    while (*str1 == *str2)
  {
    if (*str1=='\0')
      return 0;
    str1++;
    str2++;
  }
  return *str1 - *str2;
}
int main()
{
  char arr1[] = "abddd";
  char arr2[] = "abc";
  int ret=my_strcmp(arr1,arr2);
  if (ret > 0)
    printf("str1大\n");
  else if (ret < 0)
    printf("str2大\n");
  else
    printf("一样大\n");
  return 0;
}

5.strncat

void my_strncat(char* dest, char* src, int n)
{
  while (*dest)
  {
    dest++;
  }
  while (n--)
  {
    *dest++= *src++;
  }
  *dest = '\0';
}
int main()
{
  char arr1[6] = "aa";
  char arr2[] = "bbbbb";
  my_strncat(arr1, arr2,3);
  printf("%s", arr1);
}

总结

  在使用字符串函数的时候,要注意的是函数的返回值和参数的使用,以及源字符串和目的字符串的空间大小!

      我们下期再见!

目录
相关文章
|
7月前
|
C语言 C++
C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数
C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数
25 0
|
2月前
|
C语言
字符函数和字符串函数解析及模拟实现
字符函数和字符串函数解析及模拟实现
48 0
|
2月前
字符串函数的模拟实现
字符串函数的模拟实现
15 1
|
5月前
|
编译器 C语言
字符串函数的使用及模拟实现
字符串函数的使用及模拟实现
24 0
|
5月前
|
程序员
字符串函数的使用及其模拟实现
字符串函数的使用及其模拟实现
36 0
|
7月前
|
C语言 C++
C/C++字符函数和字符串函数详解————内存函数详解与模拟
C/C++字符函数和字符串函数详解————内存函数详解与模拟
24 1
|
10月前
|
C语言
深入探索字符串函数与模拟实现
深入探索字符串函数与模拟实现
71 1
深入探索字符串函数与模拟实现
|
11月前
|
存储
字符函数和字符串函数的使用及模拟实现(上)(1)
字符函数和字符串函数的使用及模拟实现(上)
42 0
|
11月前
字符串函数模拟与实现
字符串函数模拟与实现
46 0