带你快速了解字符(串)函数(二)

简介: 带你快速了解字符(串)函数(二)

3. strcat函数


功能: 连接字符串


char * strcat ( char * destination, const char * source );
//destineion--指向目标数组的指针,该数组应包含字符串,并且足够大以包含串联的结果字符串
//source--要追加的字符串

将源字符串的副本追加到目标字符串。

目标中的终止空字符被源的第一个字符覆盖,并且在目标中由两者串联形成的新字符串的末尾包含一个空字符。


目的地和来源不得重叠。


🍤 实例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[100]="hello ";
  char str2[] = "world";
  printf("%s\n", strcat(str1, str2));
  return 0;
}

🍤 运行结果:


46c1aebd2fc013e3cf1fbf54ba4d8f6b_c5155fe0ba13417c87797574991f8670.png


注:

🍥 源字符串必须以 ‘\0’ 结束。


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


🍥 目标空间必须可修改。


3.1 模拟实现

#include<stdio.h>
char* my_strcat(char*dest, const char *src)
{
  assert(dest && src);
  char* ret = dest;
  //1. 找目标空间中的\0
  while (*dest)
  {
    dest++;
  }
  while (*dest++ = *src++)//实现拷贝
  {
    ;
  }
  return ret;
}
int main()
{
  char arr1[20] = "hello ";
  char arr2[] = "world";
  my_strcat(arr1, arr2);
  printf("%s\n", arr1);
  return 0;
}


4. strcmp函数


功能: 比较两个字符串


int strcmp ( const char * str1, const char * str2 );

将字符串 str1 与字符串 str2 进行比较。


开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或达到终止空字符。


此函数执行字符的二进制比较。


标准规定:

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


🍥 第一个字符串等于第二个字符串,则返回0


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


🍤 实例1:


#include<stdio.h>
#include<string.h>
int main()
{
  printf("%d\n", strcmp("bbq","bcq"));
  return 0;
}

🍤 运行结果:

-1


🍤 实例2:猜动物


#include<stdio.h>
#include<string.h>
int main()
{
    char str1[] = "dog";
    char str2[80];
    do {
        printf("Guess my favorite animal? ");
        scanf("%s", str2);
    } while (strcmp(str1, str2) != 0);
    puts("Correct answer!");
    return 0;
}

🍤 运行结果:

1af09c0e8838785f78d160b153b20125_832c4e5055f44f9fa613ea3213f065fc.png


4.1 模拟实现

int my_strcmp(const char* str1, const char* str2)
{
  assert(str1 && str2);
  while (*str1 == *str2)
  {
    if (*str1 == '\0')
      return 0;
    str1++;//后移
    str2++;
  }
  return (*str1 - *str2);
}
int main()
{
  int ret = my_strcmp("bbq", "bcq");
  if (ret>0)
    printf(">\n");
  printf("%d\n", ret);//-1
  return 0;
}


5. strncpy函数


功能: 从字符串中复制字符


char * strncpy ( char * destination, const char * source, size_t num );
//destination--指向要在其中复制内容的目标数组的指针。
//source--要复制的 C 字符串。
//num--要从源复制的最大字符数。
//size_t 是无符号整数类型。

拷贝num个字符从源字符串到目标空间。


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


🍤 实例:


#include <stdio.h>
#include <string.h>
int main()
{
  char str1[] = "To be or not to be";
  char str2[40];
  char str3[40];
  strncpy(str2, str1, sizeof(str2));
  strncpy(str3, str2, 5);
  str3[5] = '\0';   
  puts(str1);//打印字符串
  puts(str2);
  puts(str3);
  return 0;
}

🍤 运行结果:

3cbfd243736679b23f418f9b3750b73f_9371631997a7454286cd8ce72aa61fd7.png


5.1 模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* sou, size_t num)
{
  char* ret = dest;
  assert(dest != NULL);
  assert(sou != NULL);
  for (int i = (int)num; i > 0; i--)
    *dest++ = *sou++;
  return ret;
}
int main()
{
  char str1[20] = "abcdef";
  char str2[] = "xxx";
  my_strncpy(str1, str2, sizeof(str1));
  puts(str1);
  return 0;
}

🍤 运行结果:

xxx

a92295c7a023dd8ec6a1e73037a78522_5f3062af011648d2a92a3f4cac080415.png


6. strncat函数


功能: 从字符串追加字符


char * strncat ( char * destination, const char * source, size_t num );
//destination--指向目标数组的指针,该数组应包含一个字符串,并且足够大以包含串联的结果字符串,包括其他 null 字符。
//source--要追加的 C 字符串。
//num--要追加的最大字符数。
//size_t是无符号整数类型。

将源的第一个数字字符追加到目标,外加一个终止空字符。


如果源中 C 字符串的长度小于 num,则仅复制终止空字符之前的内容。


🍤 实例1:


#include <stdio.h>
#include <string.h>
int main ()
{
  char str1[20];
  char str2[20];
  strcpy (str1,"To be ");
  strcpy (str2,"or not to be");
  strncat (str1, str2, 6);//将str2的前6个字符追加给str1后面
  puts (str1);//To be or not
  return 0;
}

🍤 运行结果:

7deb4eb79ed2f8b983d3f60b9322d5c3_637d727f0f00470d9d5079ff1a83535f.png

🍤 实例2:


int main()
{
  char arr1[20] = "abcdef\0yyyyyyyy";
  char arr2[] = "xxxxxxxxx";
  strncat(arr1, arr2, 3);
  puts(arr1);//abcdefxxx
  return 0;
}

7004a633359cc63c7fa60fba2b4eac84_4b4a29d0a4354b2c94d482a380eb65d3.png

🍩说明了,遇到了结束标志 '\0' 就开始复制源代码


6.1 模拟实现

#include <stdio.h>
#include<assert.h>
char* my_strncat(char* dest, const char* soc, size_t num)
{
  char* ret = dest;
  int i=0;
  int count = 0;
  assert(dest != NULL);
  assert(soc != NULL);
  while (*dest != '\0')
  {
    dest++;
  }
  while (num--)//终止条件:复制的个数num
    *dest++ = *soc++;//追加
  *dest = '\0';
  return ret;
}
int main()
{
  char arr1[20] = "abcdef\0yyyyyyyy";
  char arr2[] = "xxxxxxxxx";
  my_strncat(arr1, arr2, 3);
  puts(arr1);//abcdefxxx
  return 0;
}

🍤 运行结果:

c0a9c293b00f16394a7ce147274190e1_9efdcd0730c14eff9f1d7264a6a8ae8e.png


相关文章
|
9月前
|
C语言
带你快速了解字符(串)函数(一)
带你快速了解字符(串)函数(一)
|
9月前
带你快速了解字符(串)函数(三)
带你快速了解字符(串)函数(三)
实现一个函数,可以左右旋字符串中的k个字符
实现一个函数,可以左右旋字符串中的k个字符 ABCD左旋一个字符得到BCDA ABCD左旋两个字符的到CDAB ABCD右旋一个字符得到DABC ABCD右旋两个字符的到CDAB
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
68 0
|
存储 Shell 程序员
字符和字符串|学习笔记
快速学习字符和字符串
69 0
字符和字符串|学习笔记
|
人工智能 BI
762 字符串匹配----给定两个长度相同的字符串 a 和字符串 b。如果在某个位置 i 上,满足字符串 a 上的字符 a[i] 和字符串 b 上的字符 b[i] 相同,那么这个位置上的字符就是匹配
给定两个长度相同的字符串 aa 和字符串 bb。 如果在某个位置 ii 上,满足字符串 aa 上的字符 a[i]a[i] 和字符串 bb 上的字符 b[i]b[i] 相同,那么这个位置上的字符就是匹配的。 如果两个字符串的匹配位置的数量与字符串总长度的比值大于或等于 kk,则称两个字符串是匹配的。
227 0
772. 只出现一次的字符 ---- 给你一个只包含小写字母的字符串。请你判断是否存在只在字符串中出现过一次的字符
给你一个只包含小写字母的字符串。 请你判断是否存在只在字符串中出现过一次的字符。 如果存在,则输出满足条件的字符中位置最靠前的那个。
244 0
C#编程-17:字符串取第一个和最后一个字符
C#编程-17:字符串取第一个和最后一个字符
268 0

热门文章

最新文章