目录
目录字符串的声明和初始化
在 C 语言中,字符串实际上是使用空字符 \0
结尾的一维字符数组。
声明和初始化一个abc字符串:
char site[4] = {'a', 'b', 'c', '\0'};
简化:
char site[] = "abc";
字符串的内存表示
因此,
\0
是用于标记字符串的结束。- 由于在数组的末尾存储了空字符
\0
,字符数组的大小比实际存储的字符数多一个。 - 字符串
char site[]="abc"
中site
表示字符串第一个字符'a'
的地址
字符串的输入输出
输入
- 1.
scanf("%s",a(地址),n)
=>stdio.h
n
表示至多读取n-1个字符,即n
表示输入的字符串的最大长度(包括\0
)
遇到空格等空字符会返回,不读取空格等空字符- 1.1
scanf("%[^o]",a(地址),sizeof(a))
=>stdio.h
%[^o]
使输入遇到o
字符再返回,不读取o
字符- 2.
gets(s)
=>stdio.h
- 从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。
gets()函数读取空格,不读取换行符\n
,它会把换行符替换成空字符\0
,作为c语言字符串结束的标志
输出
- 1.
printf("%s",a(变量名))
=>stdio.h
- 输出字符串a
- 2.
puts
=>stdio.h
- 用于显示字符串,并自动在字符串后面添加一个换行标志
\n
。
字符串相关函数
PS:若无特殊说明,函数返回值一般为int
型。
- 1.
n=strlen(s)
=>string.h
- 得到字符串s的长度不包含'\0',返回给n;
- 2.
long int n=strtol(s,&ptr,base)
=>stdlib.h
- 把指针
s
所指向的字符串根据给定的base
(指s中的数值的进制) 转换为一个长整数(10进制,类型为 long int 型),base
必须介于 2 和 36(包含)之间,或者是特殊值 0。
&ptr
是对类型为char*
的对象的引用,其值由函数设置为s
中数值后的下一个字符
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[30] = "2030300 This is test";
char *ptr;
long ret;
ret = strtol(s, &ptr, 10);
printf("数字(无符号长整数)是 %ld\n", ret);
printf("字符串部分是 |%s|", ptr);
return(0);
}
运行结果:
- 3.
strcpy(a,b)
=>string.h
- 把字符串b复制给a
- 4.
n=strcmp(a,b)
=>string.h
- 判断字符串a和b的大小,按字符串长度和字典顺序
if(a<b),n<0;if(a==b),n==0;if(a>b),n>0.
- 5.
strcat(a,b)
=>string.h
- 把b字符串接到a的后面,a要足够大
6.(指针)p=strchr(a,c)
=>string.h
返回字符串a中字符c第一次**出现的地址
7.(指针)p=strrchr(a,c)
=>string.h
返回字符串a中字符c最后出现一次的地址
8.(指针)p=strstr(a,b)
=>string.h
返回字符串a中第一次出现子字符串b的地址
总结
c语言中的字符串由一个或多个字符组成,以空字符结尾,但字符串长度不包括空字符。
字符串常常用字符数组char a[n]
和指针char *p=a
来表示。
对字符串操作时要注意数组长度足够大,否则会导致数组越界。