文章目录
字符串的本质
- 一串字符,但有特别的格式要求,即最后一个必须是串结束符
- 一串就是很多个字符,0个,1个,n个,再加上’\0’结束符,形成字符串
- 字符串最平常的表示:双引号
- 字符串在内存中的表示:一段内存空间,刚好对应一个字符数组
- 字符串的C语言表示
- char str[N];
- char *str;
- 也就是说,字符串在内存本质上,是一个字符数组
- 串复制
- 串连接
- 串比较
- 串数长度等均为整体操作
- 数组不能整体操作,需要相应的功能函数来实现
字符串的输入
1 scanf方法
%s
1. 遇到空格,tab,enter结束
2. 自动在结束处补上'\0'的串结束标志
3. 装入串的内存空间要足够,取数组的地址,数组名即可
%c
2 gets方法
3 getchar()方法
4 从文件中读入串
5 常量串最好使用const str *s = "this is a string";来定义
字符串的功能函数
-
串复制strcpy
-
串连接strcat
-
串比较strcmp
-
串长度计数,这里是指有效长度,即不包括串的结束符strlen
串复制strcpy
strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中去。
例如:
char str1[10], str2[ ] = “China”;
strcpy(str1, str2); 正确!
str1=str2; 错误!
strcpy(str1, “China”);正确!
str1 = “China”; 错误!
串连接strcat
strcat(字符数组1,字符串2)
作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中。
例如:
char str1[15]={“I am ”};
char str2[ ]={“happy”};
strcat(str1, str2);
串比较strcmp
字符串的比较规则:
对两个字符串从左至右逐个对应字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。
如全部字符相同,则认为相等;
若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
例如:
“these” 与 “that”
“abc” 与 “abc”
“36+54” 与 “36”
strcmp(字符串1,字符串2)
作用:比较字符串1和字符串2的大小。比较的结果由函数值带回。
☆ 如果字符串1=字符串2,函数值等于0。
☆ 如果字符串1>字符串2,函数值大于0。
☆ 如果字符串1<字符串2,函数值小于0。
例如:
if (strcmp(str1, str2) > 0 ) 则str1大于str2
if (strcmp(str1, str2) < 0 ) 则str1小于str2
if (strcmp(str1, str2) == 0 ) 则str1等于str2
串长度strlen
strlen(字符串)
作用:计算字符串的长度。字符串的长度为第一个‘\0’之前的字符个数。
例如:
char str[100] = “boy”;
strlen(str)的结果为3
strlen(“china”)的结果为5
strlen(“ch\0ina”)的结果是什么?
C 中有大量操作字符串的函数
序号 | 函数 & 目的 |
---|---|
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。 |
5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[12] = "Hello";
char str2[12] = "World";
char str3[12];
int len ;
/* 复制 str1 到 str3 */
strcpy(str3, str1);
printf("strcpy( str3, str1) : %s\n", str3 );
/* 连接 str1 和 str2 */
strcat( str1, str2);
printf("strcat( str1, str2): %s\n", str1 );
/* 连接后,str1 的总长度 */
len = strlen(str1);
printf("strlen(str1) : %d\n", len );
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10