新手小白必了解c语言之字符串函数

发布时间:2024年01月06日

本篇介绍字符串库函数为

?

目录

引言?

一:字符串函数的头文件为#include

二:求字符串长度函数 (strlen)

1.函数介绍

2.函数使用举例

3.模拟实现?

三:字符串复制函数(strcpy)?

1.函数介绍

2.函数使用举例

3.模拟实现?

四:字符串连接函数(strcat)?

1.函数介绍

2.函数使用举例

3.模拟实现?

五:字符串比较函数(strcmp)?

1.函数介绍

2.函数使用举例

3.模拟实现?

六: 字符串受限制函数(strncpy.strncmp,strncat)

1.函数介绍?

2.函数使用举例(举例介绍一个就行)

七:字符串寻找字符串函数 (strstr)

1.函数介绍

2.函数使用举例

3.模拟实现?

八: 字符串分割函数(strtok)

1.函数介绍

2.函数使用举例

九:字符串错误打印函数(strerror)?

1.函数介绍

2.函数使用举例

3.也可以使用perror函数来打印错误信息?

感谢观看


听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

引言?

1.c语言中字符串是一个特殊的存在,相关操作是由各式各样的字符串函数来实现的,接下来我们就讲解c语言中常见并且常用的字符串函数

2.

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。

字符串常量 适用于那些对它不做修改的字符串函数(用const修饰)

一:字符串函数的头文件为#include <string.h>

二:求字符串长度函数 (strlen)

1.函数介绍

注:size_t表示无符号整数即unsigned int

(1) 字符串以? '\0' 作为结束标志, strlen函数返回的是在字符串中 '\0' 前面出现的字符个数 (不包
'\0' )
(2) sizeof计算的是整个字符串的大小,单位为字节,包含'\0'
2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
  char s[81]="abcdef";
   int len=strlen(s);
   printf("%d",len);//计算结果为6
   return 0;
}

?

3.模拟实现?
#include <stdio.h>
size_t my_strlen(char *s1)
{
   //方法为为遍历这个字符数组,直到'\0'
   size_t count=0;
   while(*s1!='\0')
  {
     count++;
     s1++;
  }
  return count;
}

int main()
{
  char s[81]="abcdef";
  size_t ret=my_strlen(s);
  printf("%u",ret);
  return 0;
}

三:字符串复制函数(strcpy)?

1.函数介绍

(1) 这个函数会将字符串source复制到字符串destination,也将其'\0'复制过去

(2)字符串destination的空间必须足够大

(3)字符串source必须含字符串结束标志'\0'

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
 char s1[81]="abcdef";
 char s2[81];
 strcpy(s2,s1);//将字符串s1的内容复制给字符串s2
 puts(s2);//字符串输出函数
 return 0;
}

?

?

3.模拟实现?
#include <stdio.h>
#include <string.h>
char * my_strcpy(char *des,const char *sou)
{
   //遍历字符串sou,直至'\0'
    char *ret=des;
    while(*des++=*sou++);
   return ret;
}
int main()
{
 char s1[81]="abcdef";
 char s2[81];
 my_strcpy(s2,s1);
 puts(s2);
 return 0;
}

四:字符串连接函数(strcat)?

1.函数介绍

?

(1) 这个函数会将字符串source连接到字符串destination的后面

(2)字符串destination的空间必须足够大

(3)字符串source必须含字符串结束标志'\0'

(4)尽量不要自己连接自己

2.函数使用举例
#include <string.h>
#include <stdio.h>
int main()
{
  char s1[81]="abc";
  char s2[81]="def";
  strcat(s1,s2);
  puts(s1);
  return 0;
}

?

3.模拟实现?
#include <string.h>
#include <stdio.h>
char *my_strcat(char *des,const char *sou)
{
	char *ret=des;
	while(*des!='\0')//遍历字符串des直至'\0'
	{
		des++;
	}
//遍历完des后,将字符串sou的内容复制给字符串des
	while(*des++=*sou++);
	return ret;
}
int main()
{
  char s1[81]="abc";
  char s2[81]="def";
  my_strcat(s1,s2);
  puts(s1);
  return 0;
}

五:字符串比较函数(strcmp)?

1.函数介绍

(1) 这个函数是用来比较两个字符串的大小的,从两个字符串的起始位置开始比较,相同则继续比较,不同则返回一个int 类型的值,直至'\0',如果比较完还是一样的话返回0

(2)比较规则:大写字母小于小写字母,小写字母之间根据小写字母的ASCII码值来比较

(3)返回值规则:

第一个字符串大于第二个字符串,则返回大于 0 的数字
第一个字符串等于第二个字符串,则返回 0
第一个字符串小于第二个字符串,则返回小于 0 的数字
2.函数使用举例
#include <string.h>
#include <stdio.h>
int main()
{
  char s1[81]="abc";
  char s2[81]="abe";
  int ret=strcmp(s1,s2);
  printf("%d\n",ret);
  return 0;
}

?

3.模拟实现?
#include <stdio.h>
#include <string.h>
int my_strcmp(const char *des,const char *sou)
{
  while(*des==*sou);
  {
  	if(*des=='\0') return 0;
  	des++;
  	sou++;
  }
  if(*des>*sou) return 1;
  else if(*des<*sou) return -1;
}
int main()
{
  
   int ret=my_strcmp("abc","abd");
   printf("%d",ret);
   return 0;
}

六: 字符串受限制函数(strncpy.strncmp,strncat)

1.函数介绍?

?

?

?

?

(1) 通过与上面几个函数比较,参数只多了个size_t num,代表意思为只复制/比较/连接num个字符

(2)比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

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

2.函数使用举例(举例介绍一个就行)
#include <stdio.h>
#include <string.h>
int main()
{ 
  char s1[81]="abcdef";
  char s2[81]="****";
  strncpy(s2,s1,3);
  puts(s2);
}

?

七:字符串寻找字符串函数 (strstr)

1.函数介绍

(1)此函数为字符串中寻找子字符串的函数?

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
	char s1[]="abcdefabcdef";
	char s2[]="def";
	char *ret=strstr(s1,s2);
	if(ret!=NULL)
	{
		printf("%s\n",ret);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

?

3.模拟实现?

#include <stdio.h>
char* my_strstr(char* str1, char* str2)
{
	char* cp = str1;
	char* s1 = cp;
	char* s2 = str2;
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')return cp;
		cp++;
	}
	return NULL;
}
int main()
{
	char s1[] = "abbbcdef";
	char s2[] = "bbc";
	char* ret = my_strstr(s1, s2);
	if (ret != NULL)
	{
		printf("%s\n",ret);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

?

八: 字符串分割函数(strtok)

1.函数介绍

?

(1)?sep参数是个字符串,定义了用作分隔符的字符集合

(2)第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。

(3)strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)

(4)strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

(5)strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

(6)如果字符串中不存在更多的标记,则返回 NULL 指针。

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
	char s1[]="abcdef@year.net";
	char s2[81];
	strcpy(s2,s1);
	char sep[]="@.";
	//方法一: 
	//char *ret=strtok(s2,sep);
	//printf("%s\n",ret);
	
	//ret=strtok(NULL,sep);
	//printf("%s\n",ret);
	
	//ret=strtok(NULL,sep);
	//printf("%s\n",ret);
	
	//方法二: 
   char *ret=NULL;
   for(ret=strtok(s2,sep);ret!=NULL;ret=strtok(NULL,sep)) 
   {
   	printf("%s\n",ret);
   }
	return 0;
}

?

九:字符串错误打印函数(strerror)?

1.函数介绍

(1)?返回错误码,所对应的错误信息。

(2)库函数在执行过程中,发生了错位会将一个错误码存放在errno这个变量中,errno是c语言提供的一个全局的变量

2.函数使用举例

3.也可以使用perror函数来打印错误信息?

感谢观看

文章来源:https://blog.csdn.net/Miwll/article/details/135429777
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。