C语言字符操作函数和字符串操作函数
目录
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);
}
【C语言字符操作函数和字符串操作函数】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
#include
int 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
#include
int 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
#include
int main()
{
char a[] = "abc.def";
char b[] = ".";
puts(strtok(a, b));
//把字符串a中的“.”替换成'\0'并返回a字符串中a元素的地址
}
分割成多段 需要多次调用
每次调用后会保存此次更改'\0'后一个元素的地址
下一次调用时“参数1”需要传空指针(NULL)才能继续切割
#include
#include
int 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写的可能有些问题,然后还请大佬们指正
以上就是本次的分享,欢迎大家评论,指出错误或更好的方法。
推荐阅读
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 在线版的迅捷思维导图怎么操作()
- 操作系统|[译]从内部了解现代浏览器(1)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场