资讯专栏INFORMATION COLUMN

C语言字符操作函数和字符串操作函数

0x584a / 1705人阅读

摘要:作用字符串拷贝原型使用格式字符数组名,字符数组名使用该函数有两个参数,右边拷贝到左边返回值为字符串的首地址字符串拷贝到字符串输出结果注意此函数是用来判断是否结束的,所以只能拷贝带有的字符串。

目录

1.strlen  

2.strcpy  

3.strcat

4.strcmp

后面是长度受限的字符串操作函数

5.strncpy

6.strncat

 7.strncmp

8.strstr

9.strtok

   


1.strlen  

 

作用:计算字符串长度

原型:

size_t strlen ( const char * str );

使用格式:

                 strlen(字符数组名) 

使用:传入一个字符串或字符串首元素地址,返回/0前字符个数。

strlen("abc");//或char aa[5]="abc"strlen(aa);

输出结果:

注意:只能计算带有“/0”的字符串,

           由于返回值类型为“size_t”类型,

           所以 例如:

if(strlen("abc")-strlen("abcdefg")>0)

           时会出现问题,

           “size_t”是由“unsigend int”重命名得来。

2.strcpy  

作用:字符串拷贝

原型:

char*strcpy(char* destination,const char* source);

使用格式: strcpy(字符数组名1,字符数组名2)

使用:该函数有两个参数,右边拷贝到左边————返回值为字符串1的首地址

int main(){	char a[] = { "##############" };	char b[] = { "abc" };	puts(a);	strcpy(a, b);//b字符串拷贝到a字符串	puts(a);}

输出结果:

注意:

1.此函数是用/0来判断是否结束的,所以只能拷贝带有/0的字符串。

int main(){	char a[] = { "##############" };	char b[] = { "a","b","c"};//这种是不带/0的写法,编译器虽然不会报错但是也不会出结果的	puts(a);	strcpy(a, b);//b字符串拷贝到a字符串	puts(a);}

2.左边的字符串要大于右面的字符串,也就是上面a字符串要大于b字符串。

3.左边的字符串一定是可以修改的,也就是上面a字符串是可修改的。

3.strcat

作用:追加字符串。

原型:

char*strcat(char*strDestination,const char*strSource)

使用格式: strcat(字符数组名1,字符数组名2)

使用:该函数有两个参数, 右边的字符串追加到左边————返回值是“字符串1”的首地址

#include #include int main(){	char aa[10] = { "abc" };	strcat(aa, "def");	puts(aa);//最后输出abcdef}

注意:被追加的字符串(左边的第一个参数)一定要预留空间,预留的空间要大于追加后的字符               串。

           此函数的两个参数都要有"/0",没有"/0"是会报错的。

4.strcmp

作用:比较字符串,比较的是内容,不是长度。

原型:

int strcmp(const char *string1,const char *string2)

使用方式:strcmp(字符数组名1,字符数组名2)

使用: 

           简单说就是传入两个字符串的地址,

           两个字符串完全相等返回0,

           不相等返回>0的数或<0的数

           <0的情况:

            >0的情况 :

 注意:此函数返回的值与字符串的大小,所占内存无关,只与第一对不同的字符串和字符串是否                相等有关。

            只能用来比较带有/0 的字符串。

后面是长度受限的字符串操作函数

5.strncpy

作用:拷贝固定长度的字符串

原型:

char *strncpy( char *strDest, const char *strSource, size_t count );

使用方式:strncpy(字符数组名1,字符数组名2,无符号整形) 

使用:此函数有三个参数,

           意思是,把strSurce中的count个字符拷贝到strDest 

下面是参数对应的位置

#include #includeint main(){	char a[] = "abcdefg";	char b[] = "#######";	strncpy(a, b, 3);//表示,把b中的3个字符串拷贝到a中	puts(a);}

  注意:第三个参数最好不要大于第二个字符串的元素个数,如果大于,会补‘/0’。

             该函数会返回第一个参数的地址。

6.strncat

作用:追加固定长度的字符串

原型:

char *strncat( char *strDest, const char *strSource, size_t count );

使用方式:strncat(字符数组名1,字符数组名2,无符号整形)

使用:

        下面我就用红字代替对应的参数。

 把  “b字符串”  中的前  “参数3”  个字符串追加到  “a字符串”  后。

例:

#include #includeint main(){	char aa[10] = "abc";	char bb[10] = "######";	strncat(aa, bb, 3);//把bb中的前三个字符追加到aa后	puts(aa);}

 最后输出“abc###”。

注意:该函数追加后会自动补"/0",所以要保证

           {“a字符串” 空间大于  “a字符串”   加   “追加字符个数”+1}

           后面这个1是"/0"的空间

          如果  “参数3”   >   “b字符串”  只会追加   “b字符串”   加一个  “/0”

 7.strncmp

作用:比较指定字符个数的字符串

原型:

int strncmp( const char *string1, const char *string2, size_t count );

使用方式:strncmp(字符数组名1,字符数组名2,无符号整形) 

使用:

           下面用红字代替对应参数。

 

 把  “参数2”  中的前 “参数3”  个字符与  “参数1”  中的前“参数3”个字符比较

比较方式与strcmp是一样的只是加了个长度的限制。

8.strstr

作用:查找字符串

原型:

char *strstr( const char *string, const char *strCharSet );

 使用方式:

                   strstr(字符数组名1,字符数组名2)

使用:

 在  “字符串1”  中找  “字符串2”  在  “字符串1”  中第一次出现的位置

并返回第一次出现位置的首地址,如果找不到返回空指针。

找到:

#include#include int main(){	char aa[] = "aa bb cc bb";	char bb[] = "bb";	char* c = strstr(aa, bb);//在aa中找bb在aa中第一次出现的位置	if (c == NULL)	{		printf("找不到/n");//找不到会返回空指针	}	else	{		printf("找到了/n");		puts(c);//找到返回bb在aa中第一次出现位置的地址	}}

找不到:

#include#include int main(){	char aa[] = "aa bb cc bb";	char bb[] = "ee";	char* c = strstr(aa, bb);//在aa中找bb在aa中第一次出现的位置	if (c == NULL)	{		printf("找不到/n");//找不到会返回空指针	}	else	{		printf("找到了/n");		puts(c);//找到返回bb在aa中第一次出现位置的地址	}}

9.strtok

作用:切割字符串

原型:

char *strtok( char *strToken, const char *strDelimit );

使用方式:

                   strtok(字符数组名1,字符数组名2)

使用:

“参数1”   处 传 被分割的字符串 

“参数2”   处 传 分割符(其实就是字符)

分割方式:

在 "参数1"  中首次遇到   "参数2"  中的元素时

把  “参数1” 中该元素替换为‘/0’

#include#includeint main(){	char a[] = "abc.def";	char b[] = ".";	puts(strtok(a, b));//把字符串a中的“.”替换成"/0"并返回a字符串中a元素的地址	}

分割成多段 需要多次调用

每次调用后会保存此次更改"/0"后一个元素的地址

下一次调用时   “参数1”   需要传空指针(NULL)才能继续切割

#include#includeint main(){	char a[] = "aaa.bbb.ccc";//被分割的字符串	char b[] = ".";//分割符	printf("%s/n", strtok(a, b));//返回a字符串中第一个a的地址	printf("%s/n", strtok(NULL, b));//此时该函式已经保存了上一次调用a字符串中第一个b的地址	                                //并把bbb后的“.”改为“/0”	printf("%s/n", strtok(NULL, b));//此时并没有找到b字符串中元素直接返回此次调用起始地址	printf("%s/n", strtok(NULL, b));//这时字符串中已经不存在更多标记返回空指针(NULL)}

返回值是此函数此次切割字符串的首地址

注意:此函数会改变原字符串所以一般用拷贝后的临时数据。

嗯,这次这strtok写的可能有些问题,然后还请大佬们指正

以上就是本次的分享,欢迎大家评论,指出错误或更好的方法。

   

         

  

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122425.html

相关文章

  • 【零基础趣学C语言】- 史上最全C语言函数详解(万字图文+代码演示+图解)

    摘要:语言在设计中考虑了函数的高效性和易用性两个原则。在语言中,最常见的当属函数了。以上就是一个函数,它被称为语言的入口函数,或者主函数。例如和都是函数名。形式参数当函数调用完成之后就自动销毁了。 ...

    468122151 评论0 收藏0
  • 【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)

    摘要:局部变量的作用域是变量所在的局部范围。生命周期变量的生命周期变量的创建和销毁之间的时间段局部变量的生命周期进入作用域生命周期开始,出作用域生命周期结束。 前言: 就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第...

    chaos_G 评论0 收藏0
  • Win知识 - 程序是怎样跑起来的(合集)

    摘要:系统调用和高级编程语言的移植性操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这是因为硬件的控制是由全权负责的。语言提供的函数,是用来在命令提示符中显示字符串的函数。 系统调用和高级编程语言的移植性 操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这些...

    joywek 评论0 收藏0
  • ❤️学懂C语言文件操作读这篇就够了(万字总结,附习题)❤️

    目录 ​​​ 一,写在前面 二,为什么使用文件 1,原因 2,数据流 3,缓冲区(Buffer) 4,C语言中带缓冲区的文件处理 5,文件类型 6,文件存取方式 三,什么是文件 1,程序文件  2,数据文件 3,文件名 四,文件的打开和关闭  1,文件指针  2,文件的打开和关闭 五,文件的顺序读写 1,功能 2,代码实现 六,文件的随机读写 1,fseek 2,ftell 3,rewind 七,...

    Genng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<