字符串函数
所在头文件:#include "string.h"
字符串长度函数strlen()
- 格式:strlen(字符数组)
- 功能:计算字符串长度
- 返回值:返回字符串实际长度,不包括'\0'在内
- \xhh表示十六进制数代表的符号
- \ddd表示八进制数代表的符号
例
#include<stdio.h>
#include<string.h>
int main(void)
{
char s0[10] = {'A','\0','B','\0','C'};
char s1[] = "\t\v\\\0will\n";
char s2[] = "\x69\141\n";
printf("%ld\t%ld\t%ld\n",strlen(s0),strlen(s1),strlen(s2));
return 0;
}
运行结果:
1 3 3
- 对于s0字符串,遇到'\0'就结束。
- 对于s1字符串,'\t'表示一个字符,一直到'\0'结束。
- 对于s2字符串,\x后两位表示十六进制数,\后边三个数字表示八进制数,'\n'表示一个字符。
字符串拷贝函数strcpy
- 格式:strcpy(字符数组1,字符串2)
- 功能:
- 将字符串2拷贝到字符数组1中
- 返回值:返回字符数组1的首地址
- 说明:
-
- 字符数组1必须足够大
-
- 拷贝时'\0'一同拷贝
#include<stdio.h>
#include<string.h>
int main(void)
{
char src[10] = "hello world";
char dest[20];
strcpy(dest,src);
puts(src);
puts(dest);
return 0;
}
运行结果:
hello world
hello world
字符串连接函数strcat()
- 格式:strcat(字符数组1,字符数组2)
- 功能:把字符数组2连到字符数组1后边
- 返回值:返回字符数组1的首地址
- 说明:
-
- 字符数组1必须足够大
-
- 连接前,两串均以'\0'结束,连接后,串1的'\0'取消,新串最后加'\0'
#include<stdio.h>
#include<string.h>
int main(void)
{
char src[50] = "hello world";
char dest[20] = "你好世界";
strcat(src,dest);
puts(src);
return 0;
}
运行结果:
hello world你好世界
字符串比较函数strcmp()
- 格式:strcmp(字符串1,字符串2)
- 功能:比较两个字符串
- 比较规则:对两串从左到右逐个字符比较(ASCII码),直到遇到不同字符或''\0'为止
- 返回值:返回int型整数
-
- 若字符串1 < 字符串2,返回负整数
-
- 若字符串1 > 字符串2,返回正整数
-
- 若字符串1 = 字符串2,返回0
#include<stdio.h>
#include<string.h>
int main(void)
{
char s0[20] = "hello world";
char s1[20] = "hello world!";
char s2[20] = "hello";
char s3[20] = "hello world";
printf("%d\n",strcmp(s0,s1));
printf("%d\n",strcmp(s0,s2));
printf("%d\n",strcmp(s0,s3));
return 0;
}
运行结果:
-33
32
0
字符串函数的拓展
- strncpy(p,p1,n)复制指定长度的字符串,把p1字符串前n个字符替换p字符串的前n个字符
- strncat(p,p1,n)附加指定长度的字符串,把p1前n个字符连接到p字符串后边
- strcasecmp()忽略大小写比较字符串
- strncmp(p,p1,n)比较指定长度的字符串
- strchr(p,c)在字符串中查找指定字符
- strstr(p,p1)查找字符串
- strnlen()
例strncpy(p.p1,n)
#include<stdio.h>
#include<string.h>
int main(void)
{
char s0[20] = "hello world";
char s1[20] = "china";
strncpy(s1,s0,4);
puts(s0);
puts(s1);
return 0;
}
运行结果:
hello world
hella
例strchr(p,c)
#include<stdio.h>
#include<string.h>
int main(void)
{
char ch = 'l';
char s0[] = "hello world";
printf("%p,%p\n",s0,strchr(s0,ch));//strnchr函数返回值是查找的字符串中第一次出现字符的地址
printf("%p,%p\n",s0,strrchr(s0,ch));//strnchr函数返回值是查找的字符串中第一次出现字符的地址
printf("%ld\n",strchr(s0,ch)-s0);//strnchr函数返回值是查找的字符串中第一次出现字符的下标
printf("%ld\n",strrchr(s0,ch)-s0);//strnchr函数返回值是查找的字符串中最后一次出现字符的下标
return 0;
}
运行结果:程序运行环境为linux环境
0x7ffc59d1c95c,0x7ffc59d1c95e
0x7ffc59d1c95c,0x7ffc59d1c965
2
9
例strstr(p,p1)
#include<stdio.h>
#include<string.h>
int main(void)
{
char str0[]= "good morning";
char str1[] = "morning";
/*在字符串str0中查找str1字符串并返回str1字符串在str0中出现的位置*/
printf("%ld\n",strstr(str0,tr1)-str0);
return 0;
}
运行结果:
5
其他不常见的字符串函数
- isalpha()检查是否为字母字符
- isupper()检查是否为大写字母字符
- iskower()检查是否为小写字母
- isdigit()检查是否为数字
这些函数需要包含#include<ctype.h>
例:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int main(void)
{
int ch;
puts("请输入字母或十以内的数字!按*键退出\n");
while((ch = getchar()) != EOF)
{
if(ch == '*')
{ break;
}
if(isalpha(ch))
{
if(isupper(ch))
{
puts("是大写字母!");
putchar(ch);
putchar('\n');
}
else
{
puts("是小写字母!");
putchar(ch);
putchar('\n');
}
}
else
{
if(isdigit(ch))
{
puts("是数字!");
printf("%c\n",ch);
}
}
}
return 0;
}
运行结果:
输入数字时判别为输入的是数字,输入大写字母时判别为是大写字母,输入小写字母时判别为是小写字母,当输入字符'*'时退出循环。