4月从零学习C语言(第22天)——字符串函数

字符串函数

C 标准库 - <string.h>

string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

strlen

size_t strlen(const char *s);

返回s的字符串长度(不包括结尾的0)

示例:

#include <stdio.h>
#include <string.h>
int main( )
{
  char a[] = "Hello";

  printf("strlen=%lu\n",strlen(a));
  printf("sizeof=%lu\n",sizeof(a));
  return 0;

}

结果:
在这里插入图片描述

strcmp

int strcmp(const char *s1, const char*s2);

比较两个字符串,返回:

  • 0:s1==s2

  • 1:s1>s2

  • -1:s1<s2

示例:

#include <stdio.h>
#include <string.h>
int main( )
{
  char s1[] = "Hello";
  char s2[] = "Hello";
  char s3[] = "hello";

  printf("%d\n",strcmp(s1,s2));
  printf("%d\n",strcmp(s1,s3));
  printf("%d\n",strcmp(s3,s2));
  return 0;

}

结果:
在这里插入图片描述

注意:

扫描二维码关注公众号,回复: 14630411 查看本文章

hello之所以比Hello小是因为H的ASCII码比h的ASCII码小我们可以做在我们的电脑上输入printf("%d\n",'H'-'h');我们得到的结果是-32因为它是一个负数所以可以证实我们的结论。

strcpy

char * strcpy(char *restrict dst, const char *restrictsrc);
  • 把src的字符串拷贝到dst

    • restrict表明src和dst不重叠 (C99)·
  • 回dst

    • 为了能链起代码来

用途:复制一个字符串

char *dst = (char*)malloc(strlen(src)+1);
strcpy(dst,src);

示例:数组版本

#include <stdio.h>
#include <string.h>
char* mycpy( char* dst, const char* src){
  int idx = 0;
  while (src[idx] ) {
    dst[idx] = src[idx];
    idx++;
  }
  dst[idx] = '\0';
  return dst;
}
int main(int argc,char count *argv[])
{
  char s1[] = "Hello";
  char s2[] = "Hello";
  strcpy(s1,s2);
  return 0;

}

指针版本:

#include <stdio.h>
#include <string.h>
char* mycpy( char* dst, const char* src){
  char* ret = dst;
  while (*src) {
    *dst = *src;
    dst++;
    src++;
  }
  //可以将while更改为下面的while循环
  //while (*dst++ = *src++);
  *dst='\0';
  return dst;
}
int main(int argc,char count *argv[])
{
  char s1[] = "Hello";
  char s2[] = "Hello";
  strcpy(s1,s2);
  return 0;

}

strcat

char * strcat(char *restrict s1, const char *restricts2);
  • 把s2拷贝到s1的后面,接成一个长的字符串
  • 返回s1
  • s1必须具有足够的空间

实例:

#include <stdio.h>
#include <string.h>

int main ()
{
   char src[50], dest[50];

   strcpy(src,  "This is source");
   strcpy(dest, "This is destination");

   strncat(dest, src, 15);

   printf("最终的目标字符串: |%s|", dest);
   
   return(0);
}

结果:
在这里插入图片描述

strcmp,strcpy,strcat的安全版本

strcpy和strcat都可能出现安全问题

那就是如果目的地没有足够的空间会出现问题。

安全版本

char * strncpy(char *restrict dst, const char *restrictsrc,size_t n);
char * strncat(char *restrict s1, const char *restricts2,size_t n);
int strncmp(const char *s1, const char *s2, size_t n);

strchr和strrchr

char * strchr(const char *s, int c);

  • 在字符串s中寻找c字符
char * strrchr(const char *s, int c);

  • 表示从右边开始寻找
  • 该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。

实例:

#include <stdio.h>
#include <string.h>

int main ()
{
   const char str[] = "hello";
   const char ch = 'e';
   char *ret;

   ret = strchr(str, ch);

   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
   
   return(0);
}

结果:
在这里插入图片描述

strstr

char *strstr(const char *haystack, const char *needle)
  • 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
char *strcasestr(const char *haystack, const char *needle)
  • 忽略大小写来寻找

实例:

#include <stdio.h>
#include <string.h>
 
 
int main()
{
   const char haystack[20] = "RUNOOB";
   const char needle[10] = "NOOB";
   char *ret;
 
   ret = strstr(haystack, needle);
 
   printf("子字符串是: %s\n", ret);
   
   return(0);
}

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46133833/article/details/124356526
今日推荐