一、字符串
- C语言中无字符串变量,用字符数组处理字符串。
- 规定C风格的字符串都是以NULL空字符(’\0’)作为终结符结尾。由于它是字符串的终止符,但它本身并不是字符串的一部分, 所以字符串的长度并不包括NULL字节,如strlen函数。而且C标准库中提供的各种字符串处理函数都要求提供的字符串或字符数组必须以空字符结束,否则会出现不可预料的结果。
初始化的方法
- 逐个字符赋值
- 用字符串常量
char ch[6]={“Hello”}; char ch[6]=“Hello”; char ch[]=“Hello”;
char fruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};
二、标准库中的常用的字符串处理函数
C标准库中头文件<string.h>
求字符串长度的函数strlen
-
格式:strlen(字符数组名)
-
功能:计算字符串长度
-
返值:返回字符串长度,不包括‘\0’在内
-
注意:\xhh 表示十六进制数代表的符号,\ddd 表示8进制的
char s1[10]= {'a','\0','B','C','\0','D'};
char s2[ ] = "\t\v\\\0will\n";
char s3[ ] = "\x69\141\n";
//s1第二个字符为'\0'结束符,故strlen计算出来为1,但实际长度为10
printf("s1: %d %d\n",strlen(s1),sizeof(s1)/sizeof(char)); //s1: 1 10
//s2的前三个字符为 '\t','\v'.'\\'(符号\的转义字符),第四个为结束符'\0'
printf("s2: %d\n",strlen(s2)); // s2: 3
// \x69表示字母i的十六进制 ,\h141为字母a的8进制
printf("s3: %d\n",strlen(s3)); // s3: 3
puts(s3); //ia
字符串拷贝函数
- strcpy函数
- 格式:strcpy(字符数组1,字符串2)
- 功能:将字符串2,拷贝到字符数组1中去
- 返值:返回字符数组1的首地址
- 说明:字符数组1必须足够大;拷贝时‘\0’一同拷贝
char str1[] = "We are csdn!";
char str2[] = "Hello!";
strcpy(str1, str2); //str1 = Hello!
- strncpy函数
- 原型:strncpy(str1,str2,n);
- 功能:将字符串str2中的前n个字符复制到字符串str1的前n个字符中
- 返回:返回字符数组1的首地址
- 注意:不会清除str1中全部字符串,只会改变前n个字符串; n不能大于字符串str1、str2的长度
char str1[] = "We are csdn!";
char str2[] = "Hello!";
strncpy(str1, str2, 3);
printf("str1 = %s\n", str1); //str1 = Helare csdn!
字符串连接函数strcat
- 格式:strcat(字符数组1,字符数组2)
- 功能:把字符数组2连到字符数组1后面
- 返值:返回字符数组1的首地址
- 说明:字符数组1必须足够大;连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最后加‘\0’
char str1[20] = "We are csdn!";
char str2[] = "Hello!";
strcat(str1, str2);
printf("str1 = %s\n", str1); //str1 = We are csdn!Hello!
字符串比较函数strcmp
- 格式:strcmp(字符串1,字符串2)
- 功能:比较两个字符串
- 比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
- 返值:返回int型整数
- a. 若字符串1< 字符串2, 返回负整数
- b. 若字符串1> 字符串2, 返回正整数
- c. 若字符串1== 字符串2, 返回零
char str1[] = "Wearecsdn!";
char str2[] = "Wearecsdn!";
char str3[] = "Wearea!";
char str4[] = "Wearef!";
char str5[] = "Weare"
int cmp1 = strcmp(str1, str2); //cmp1=0
int cmp2 = strcmp(str1, str3); //cmp2=1
int cmp3 = strcmp(str1, str4); //cmp3=-1
int cmp4 = strcmp(str1, str5); //cmp4=1
其他常见的字符串函数
- strncat(p, p1, n) 附加指定长度字符串
- strcasecmp忽略大小写比较字符串
- strncmp(p, p1, n) 比较指定长度字符串
- strchr(p, c) 在字符串中查找指定字符
- strstr(p, p1) 查找字符串
- isalpha() 检查是否为字母字符
- isupper() 检查是否为大写字母字符
- islower() 检查是否为小写字母字符
- isdigit() 检查是否为数字
更新,用c语言实现相关字符串函数
注意,用const修饰防止字符串被修改
char *mystrcpy(char *str1, const char *str2){
while( *(str1++) = *(str2++));
return str1;
}
char *mystrncpy(char *str1, const char *str2,int n){
while(n--){
*(str1++) = *(str2++);
}
return str1;
}
char *mystrcat(char *str1, const char *str2){
while( *str1 != '\0'){
str1++;
}
while(*(str1++) = *(str2++));
return str1;
}
int mystrcmp(const char *str1, const char *str2){
while( (*str1==*str2) && *str1 != '\0'){
*str1++; *str2++;
}
int x=(*str1 - *str2);
return x;
}