【让你从0到1学会c语言】字符串函数详解及模拟实现(二)

简介: 【让你从0到1学会c语言】字符串函数详解及模拟实现(二)

strcat函数:


strcat函数介绍:

用处:向一个字符串,追加另外一个字符串。

参数:第一个为原字符串,第二个为要追加的字符串。

返回值:为char*,为原字符串的首字符的地址(指针)。

头文件:#include<string.h>


strcat函数注意点:

目标空间必须有足够的大,能容纳下源字符串的内容。

目标空间必须可修改。


strcat函数的使用:

例子代码:

int main()
{
  char p1[20] = "dfaw";
  char p2[20] = "sqqqq";
  strcat(p1, p2);
  printf("%s", p1);
  return 0;
}

运行结果:


strcat函数模拟实现:

原理:

先找原字符串的‘\0’的位置,从这个位置开始将要追加的字符串的字符一个个追加,注意:最后还是要有‘\0’的。

模拟实现:

#include<stdlib.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
  char* start = dest;
  assert(dest != NULL && src != NULL);
  while (*dest != '\0')
    dest++;
  while (*src != '\0')
  {
    *dest = *src;
    dest++;
    src++;
  }
  *dest = '\0';
  return start;
}
int main()
{//模拟实现strcat函数
  char a[20] = "hellow";
  char b[10] = " word !";
  char* c;
  c = my_strcat(a, b);
  printf("%s\n", a);
  system("pause");
  return 0;
}

运行结果:

strcmp函数:


strcmp函数介绍:

用处:比较两个字符串的大小。

参数:两个字符串指针。

返回值:为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。

头文件:#include<string.h>


strcmp函数注意点(返回值):

strcmp函数要注意的是就它的返回值。

我们在上面说过,strcmp的返回值有三种可能。

标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字


我们如何两个字符串如何比较:

两个字符串如何比较呢?


  • 第一个字符串的第一个字符与另外一个字符串的第一个字符比较ASCII码值,如果第一个大于第二个,就返回大于0,反之,就返回小于0.
  • 如果第一个字符串的第一个和另外一个字符串的第一个字符相等,就比较两者的第二个字符,以此类推,只有每一个字符都相等才返回0.

strcmp函数的使用:

例子代码:

int main()
{
  char p1[20] = "asjkd";
  char p2[20] = "ksd";
  int n=strcmp(p1, p2);
  if (n == 0)
    printf("两个相等\n");
  if (n > 0)
    printf("p1大\n");
  if(n<0)
    printf("p2大\n");
  return 0;
}

运行结果:


strcmp函数模拟实现:

原理:

将两者的字符串的每一个字符进行比较,如果不同,就返回结果,如果相同,就进行两者下一个字符的比较。当每一个字符都相等,才判断为两个字符串相等。

模拟实现:

int my_strcmp(char* ch1, char* ch2)
{
  if (ch1 != ch2)
  {
    if (ch1 > ch2)
      return 1;
    else
      return 2;
  }
  ch1++;
  ch2++;
}
int main()
{//strcmp函数的模拟实现
  char* ch1 = "abcdefg";
  char* ch2 = 'acdw';
  int a=my_strcmp(ch1, ch2);
  if (a == 1)
    printf("ch1大");
  if (a == 2)
    printf("ch2大");
  return 0;
}

运行结果:


strncpy函数:

strncpy函数介绍:

用处:这个就是strcpy函数的加强版,我们可以控制要复制的字符个数。还是为字符串复制函数。


参数:第一个为目标字符串的地址(指针),第二个为要复制的字符串的首字符的地址(指针),第三个为我们需要复制字符的个数。


返回值:返回值为目标字符串的地址。


头文件:#include<string.h>


strncpy函数注意点:

strncpy函数是拷贝num个字符从源字符串到目标空间。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。


strncpy函数的使用:

例子代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
  char p[10]="sdafwa";
  char a[12] = "sdghj";
  int num = 3;
  strncpy(p, a, num);
  printf("%s", p);
  return 0;
}

运行结果:


strncpy函数的模拟实现:

原理:

利用循环,然后将限制条件设为num,让它只复制num个字符就好。

模拟实现:

char* my_strncpy(char* goal, char* copy, int num)
{
  assert(goal);
  assert(copy);
  int i = 0;
  for (int i = 0; i < num; i++)
  {
    *(goal + i) = *(copy + i);
  }
  return goal;
}
int main()
{//模拟实现strncpy函数
  char* goal[20];//目标字符串
  scanf("%s", goal);
  printf("\n");
  char* copy[20];//要复制的字符串
  scanf("%s", copy);
  printf("\n");
  int num;
  scanf("%d", &num);
  char*p=my_strncpy(goal, copy, num);
  printf("%s", p);
  return 0;
}

运行结果:


strncat函数:


strncat函数介绍:

用处:这个也是strcat函数的加强版,可以控制想要的个数来追加字符串。


参数:第一个为目标字符串的地址(指针),第二个为要追加的字符串,第三个为你想要追加字符的个数。


返回值:为char*类型,是目标字符串的地址。


头文件:#include<string.h>


strncat函数的使用:

例子代码:

int main()
{//strncat函数的使用
  char p1[20]="dawff";
  char p2[10] = "siiiii";
  int num = 5;
  strncat(p1, p2, num);
  printf("%s", p1);
  return 0;
}

运行结果:


strncat函数模拟实现:

原理:

找到'\0'的位置,然后利用循环将追加的字符个数设为循环的判断条件,让它只追加num个字符。

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<math.h>
#define Tot 20
#define NUM 10
char* my_strncat(char* address, char* add, int num)
{
  assert(address);//断言防止错误
  assert(add);
  int len = (int)strlen(address);
  int remaining = Tot - len;//剩余空间
  char* p;
  int sz = (int)strlen(add);//追加函数大小
  if (sz >=num)
  {
    if (num < remaining)
    {
      p = address + len;
      int i;
      for (int i = 0; i < num; i++)
      {
        *(p + i) = *(add+i);
      }
      *(p + num) = '\0';
      return address;
    }
    else
      return NULL;
  }
  else
    return NULL;
}
int  main()
{//模拟实现strncat,追加n个字符的函数
  char arr[Tot];//原字符串
  printf("原字符串:");
  scanf("%s", arr);
  char add_char[Tot];//追加字符串
  printf("\n追加的字符串:");
  scanf("%s", add_char);
  int num;//追加的字符个数
  printf("\n追加的字符个数:");
  scanf("%d", &num);
  char* arr2=my_strncat(arr,add_char,num);
  if (arr2 == NULL)
  {
    printf("追加的字符串过大,无法追加\n");
  }
  else 
  printf("追加后的字符串:%s", arr2);
  return 0;
}


运行结果:


strncmp函数:


strncmp函数介绍:


用处:这个也是strcmp函数的加强版。不过它是控制最多比较几个字符。


参数:第一个参数是第一个字符串,第二个参数是第二个字符串,第三个参数是我们想要的最多比较几个字符的个数。


返回值: 为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。


头文件:#include<string.h>


strncmp函数注意点:

strncmp的注意点与strcmp函数一样都是为返回值,并且一样的。

我们在上面说过,strncmp的返回值有三种可能。


标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字

strncmp函数的使用:

例子代码:

int main()
{
  char p1[10] = "afasa";
  char p2[10] = "afcqqqqq";
  int num = 2;
  int a=strncmp(p1, p2, num);
  if (a == 0)
  {
    printf("两者相等");
  }
  if (a > 0)
  {
    printf("p1大");
  }
  if (a < 0)
  {
    printf("p2大");
  }
  return 0;
}

运行结果:

strncmp函数的模拟实现:

原理:

每次循环判断一次大小,如果判断出来就返回,当num次后还没有比出大小,就返回0.

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define NUM1 20
#define NUM2 10
int my_strncmp(char* str1, char* str2, int num)
{
  assert(str1);
  assert(str2);
  int i;
  int flag = 0;
  for (int i = 0; i < num; i++)
  {
    if (*str1 != *str2)
    {
      if (*str1 > *str2)
      {
        flag++;
        return flag;
      }
      else
      {
        flag--;
        return flag;
      }
    }
  }
    return flag;
}
int main()
{
  char str1[NUM1];//第一个字符串
  printf("str1=");
  scanf("%s", str1);
  printf("\n");
  char str2[NUM2];//第二个字符串
  printf("str2=");
  scanf("%s", str2);
  printf("\n");
  int num;//需要比较的字符个数
  printf("要比较的字符个数num=");
  scanf("%d", &num);
  int p;//用来判断返回值
  p=my_strncmp(str1, str2, num);
  if(p == 0)
  {
    printf("两者相等");
  }
  if (p > 0)
  {
    printf("str1大");
  }
  if (p < 0)
  {
    printf("str2大");
  }
  return 0;
}

运行结果:

相关文章
|
1月前
|
C语言
C语言中10种常见的字符串函数你都掌握了吗?
C语言中10种常见的字符串函数你都掌握了吗?
|
1月前
|
C语言
C语言-----字符串函数(1)
C语言-----字符串函数(1)
11 0
|
1月前
|
C语言
C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
44 0
|
1天前
|
C语言
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
|
16天前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
35 0
|
19天前
|
C语言
【C语言】字符串函数strcpy&&strcat&&strcmp&&strstr的使⽤和模拟实现2
【C语言】字符串函数strcpy&&strcat&&strcmp&&strstr的使⽤和模拟实现
|
30天前
|
C语言
C语言第二十五弹---字符函数和字符串函数(上)
C语言第二十五弹---字符函数和字符串函数(上)
|
1月前
|
C语言
C语言从入门到实战——常用字符函数和字符串函数的了解和模拟实现
字符函数和字符串函数都是在编程中用来处理字符和字符串的函数。 字符函数是用来处理单个字符的函数,比如查找、替换、转换大小写、比较等操作。
29 0
|
1月前
|
程序员 C语言
C语言--------字符串函数(3)
C语言--------字符串函数(3)
16 0
|
1月前
|
C语言
C语言------字符串函数(2)
C语言------字符串函数(2)
7 0