栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言笔记 · 字符串函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言笔记 · 字符串函数

目录

❶ 头文件 string.h 中字符串函数

1/9 strlen()

2/9 strcat()和strncat()

3/9 strcpy()和strncpy()

4/9 strcmp()和strncmp()

5/9 strstr()

5/9 strchr()

6/9 memcpy()

7/9 memcmp()

8/9 memset()


备注:

本文代码均在 Visual Stdio 2022_IDE 中完成。

本人尚且新手,文章为学习笔记,非教学使用。

本文若有不当,恳请大佬指正,在此再三感谢。

本人会在后续不断改正错误,逐步完善知识点。


❶ 头文件 string.h 中字符串函数

     string.h是C语言里面关于字符数组的函数定义的头文件。

1/9 strlen()

函数名称:strlen()

函数功能:求字符串长度,当首次遇到''时停止计算,包括''。返回长度。

函数原型:

size_t __cdecl strlen(const char *_Str)

函数参数:

Str -- 要求长度的目标字符串。

函数示例:

#include
#include
int main(void)
{
  char* strp1="y1x2";
  char stra1[]="7733ab";
  int i=sizeof(strp1)-1;
  int j=strlen(stra1);
  printf(" %-5s| %-5sn",strp1,stra1);
  printf(" %-5u| %-5un",i,j);
  return 0;
}

注意事项: 

① 从首元素地址遇到''为止;

② 8进制写法:77为十进制63为字符'?';

③ 指针指向的字符串不能用strlen(),strlen(指针)=4或8(32位64位系统)。

2/9 strcat()和strncat()

函数名称:strcat()

函数功能:将两个字符串拼接在一起。

函数原型:

char *__cdecl strcat(char *_Dest, const char *_Src)

函数参数:

Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。

Src -- 要追加的字符串。

函数示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
	char stra1[7] = "y1x2";
	char* strp1 = "33";
	printf(" %-7s| %-7sn",  stra1, strp1);
	strcat(stra1, strp1);
	printf(" %-7s|n", stra1);
	return 0;
}


函数名称:strncat()

函数功能:将src所指字符串前n项元素拼接追加在dest所指字符串之后。

函数原型:

char *__cdecl strncat(char *_Dest, const char *_Src, size_t _Count)

函数参数:

Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。

Src -- 要追加的字符串。

Count -- 要追加的字符数。

函数示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
	char stra1[9] = "y1x2";
	char* strp1 = "33";
	char* strp2 = "777";
	printf(" %-9s| %-9sn", stra1, strp1);
	strcat(stra1, strp1);
	printf(" %-9s| %-9sn", stra1, strp2);
	strncat(stra1, strp2, 2);
	printf(" %-9s|n", stra1);
	return 0;
}

注意事项:

     被拼接字符串数组stra1必须给定大小且足够大,否则拼接会造成内存越界。

3/9 strcpy()和strncpy()

函数名称:strcpy()

函数功能:拷贝一个字符串到另一个。

函数原型:

char *__cdecl strcpy(char *_Dest, const char *_Src)

函数参数:

Dest -- 指向用于存储复制内容的目标数组。

Src -- 要复制的字符串。

函数示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
	char stra1[5] = "33";
	char* strp1 = "y1x2";
	printf(" %-5s| %-5sn", stra1,strp1 );
	strcpy(stra1, strp1);
	printf(" %-5s| %-5sn", stra1, strp1);
	return 0;
}


函数名称:strncpy()

函数功能:将字符串src中n个字符拷贝到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。

函数原型:

char *__cdecl strcpy(char *_Dest, const char *_Src, size_t _Count)

函数参数:

Dest -- 指向用于存储复制内容的目标数组。

Src -- 要复制的字符串。

Count -- 要复制的字符数。

函数示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
	char* strp1 = "y1x2";
	char stra1[5] = "333";
	char stra2[] = "666";
	printf(" %-5s| %-5sn", stra1, strp1);
	strcpy(stra1, strp1);
	printf(" %-5s| %-5sn", stra1, strp1);
	strncpy(stra1, stra2, 2);
	printf(" %-5s| %-5sn", stra1, stra2);
	return 0;
}

注意事项:

① 拷贝的字符串stra1必须给定大小且足够大;

② 拷贝从首元素到第n元素,有元素的覆盖,没有的添加。

4/9 strcmp()和strncmp()

函数名称:strcmp()

函数功能:比较两个字符串。依次逐个字符相比较(按ASCII值比较大小),如:str1="abcde",str2="ABCDE",'a'=97,'A'=65。 97-65 = 32 > 0,strcmp(str1,str2) =1,则返回str1大于str2。若差值为0大小相同,则比较下一位,直到遇到不同字符或字符''为止,最后也一样,则str1等于str2。

     strcmp(str1,str2) > 0:str1 大于 str2;

     strcmp(str1,str2) = 0:str1 等于 str2;

     strcmp(str1,str2) < 0:str1 小于 str2。

函数原型:

int __cdecl strcmp(const char *_Str1, const char *_Str2)

函数参数:

Str1 -- 比较的第一个字符串。

Str2 -- 比较的第二个字符串。

函数示例:

#include
#include
int main(void)
{
	int i, j, k;
	char* strp1 = "abcde";
	char stra1[] = "Abcde";
	char stra2[10] = "abcdef";
	char stra3[] = "abcde";
	printf(" t%-5sn", strp1);
	printf(" %-5s| %-5s| %-5sn", stra1, stra2, stra3);
	i = strcmp(strp1, stra1);
	j = strcmp(strp1, stra2);
	k = strcmp(strp1, stra3);
	(i > 0) ? printf(" i = %2d > 0, strp1 大于 stra1n", i) : 6;
	(j < 0) ? printf(" j = %2d < 0, strp1 小于 stra2n", j) : 6;
	(k == 0) ? printf(" k = %2d = 0, strp1 等于 stra3n", k) : 6;
	return 0;
}


函数名称:strncmp()

函数功能:比较两个字符串。依次比较前MaxCount项,原理同strcmp()。

函数原型:

int __cdecl strncmp(const char *_Str1, const char *_Str2, size_t _MaxCount)

函数参数:

Str1 -- 比较的第一个字符串。

Str2 -- 比较的第二个字符串。

MaxCount -- 比较的最大字符数。

函数示例:

#include
#include
int main(void)
{
	int i, j;
	char* strp1 = "abcde";
	char stra1[] = "abcdef";
	printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
	i = strcmp(strp1, stra1);
	j = strcmp(strp1, stra1,4);
	(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
	(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
	(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
	(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
	(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
	(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
	return 0;
}

5/9 strstr()

函数名称:strstr()

函数功能:检索子串在字符串中首次出现的位置,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回(NULL)。

函数原型:

char *__cdecl strstr(const char *_Str, const char *_SubStr)

函数参数:

Str -- 要被检索的字符串。

SubStr -- 要检索的字串。

函数示例:

#include
#include
int main(void)
{
	char* strp1 = "y1x233";
	char stra1[3] = "x2";
	char stra2[4] = "666";
	printf(" %-5s| %-5s| %-5sn", strp1, stra1, stra2);
	strstr(strp1, stra1);
	printf(" strstr(strp1, stra1) = %sn", strstr(strp1, stra1));
	strstr(strp1, stra2);
	printf(" strstr(strp1, stra2) = %sn", strstr(strp1, stra2));
	return 0;
}

函数应用:

5/9 strchr()

函数名称:strchr()

函数功能:在一个串中查找给定字符的第一个匹配之处。返回在字符串 str 中第一次出现字符c的地址,如果未找到该字符则返回(NULL)。

函数原型:

char *__cdecl strchr(const char *_Str, int _Val)

函数参数:

Str -- 被检索的字符串。

Val -- 要检索的字符。

函数示例:

#include
#include
int main(void)
{
	char* strp1 = "y1x233";
	char c1 = 'x';
	char c2 = '6';
	char* ret1, ret2;
	printf(" %-5s| %c | %cn", strp1, c1, c2);
	ret1 = strchr(strp1, c1);
	printf(" strchr(strp1, c1) = %sn", ret1);
	ret2 = strchr(strp1, '6');
	printf(" strchr(strp1, c2) = %sn", ret2);
	return 0;
}

函数应用:

6/9 memcpy()

函数名称:memcpy()

函数功能:从串str2复制n个字符到str1。

函数原型:

void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)

函数参数:

Dst -- 存复制内容目标数组,类型强转成void *指针。

Src -- 被复制的源字符串,类型强转成void *指针。

Size -- 被复制的字节数。

函数示例:

#include
#include
int main(void)
{
	char* strp1 = "y1x233";
	char stra1[9] = "66";
	char stra2[9] = "rtyxz";
	printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1);
	memcpy(stra1, strp1, strlen(strp1)+1);
	printf(" %-9sn", stra1);
	memcpy(stra2, strp1 + 2, 4);
	printf(" %-9sn", stra2);
	return 0;
}

函数应用: 

7/9 memcmp()

函数名称:memcmp()

函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较

     如果返回值 < 0,则表示 str1 小于 str2。

     如果返回值 > 0,则表示 str1 大于 str2。

     如果返回值 = 0,则表示 str1 等于 str2。

函数原型:

int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)

函数参数:

str1 -- 指向内存块的指针。

str2 -- 指向内存块的指针。

n -- 要被比较的字节数。

函数示例:

#include
#include
int main(void)
{
	int i, j;
	char* strp1 = "abcde";
	char stra1[] = "abcdef";
	printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
	i = memcmp(strp1, stra1, strlen(strp1)+1);
	j = memcmp(strp1, stra1, 4);
	(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
	(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
	(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
	(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
	(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
	(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
	return 0;
}

函数应用:

8/9 memset()

函数名称:memset()

函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。

函数原型:

void *__cdecl memset(void *_Dst, int _Val, size_t _Size)

函数参数:

Dst -- 指要填充的内存块。

Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。

Size -- 要被设置为该值的字符数。

函数示例:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
int main(void)
{
	char str[50]; 
	strcpy(str, "Be a person of your word");
	puts(str);
	memset(str, '@', 11);
	puts(str);
	return(0);
}

函数应用:

2.stdlib.h中字符串与数字相互转换处理函数

1. 数字转化为字符串:

itoa():将整型值转换为字符串。

ltoa():将长整型值转换为字符串。

ultoa():将无符号长整型值转换为字符串。

gcvt():将浮点型数转换为字符串,取四舍五入。

ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

fcvt():指定位数为转换精度,其余同ecvt()。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号