C语言字符数组学习笔记
字符数组
不是字符串,因为不能用字符串方式做计算
例如char word[] ={'h''e' 'l' 'l' 'o' '!'};
但是当加上'\ 0'后它是一个字符串
char word[] ={'h''e' 'l' 'l' 'o' '!' '\ 0'};
字符串
以0结尾的一串字符,0或者'\ 0'是一样的,但是和'0'不同('0'是十进制的48),0标志字符串的结束,但它不是字符串的一部分,计算字符串长度的时候不包含这个0
字符串以数组的形式存在,以数组或指针的形式进行访问,更多是以指针形式,string.h里有很多处理字符串的函数
字符串变量
以下含义分别为
char *str ="Hello";//(str的指针指向字符数组,其内容为hello)
char word[ ]="Hello";//有个数组内容为hello
char line[10] ="Hello";有10个字节的数组line中有hello
字符串常量 双引号引入内容
例如"Hello" "Hello"会被编译器变成一个字符数组放在某处,这个数组的长度为6,结尾有表示结束的0
两个相邻的字符串常量会被自动连接起来
字符串
c语言的字符串是以字符数组的形态存在的,不能用运算符对字符串做运算,通过数组的方式可以遍历字符串
唯一特殊的地方是字符串字面量可以用来初始化字符数组
以及标准库提供了一系列字符串函数
用数组还是指针
char * str ="Hello";
char word[] ="Hello";
上述分别展示了数组和指针的写法
使用数组时表示这个字符串在这里,作为本地变量空间自动被回收
使用指针时这个字符串不知道在哪里,可以用来处理参数或者动态分配空间//malloc
构造字符串--数组
处理字符串--指针
char*是字符串吗
不一定,本意是指向字符的指针,可能指向的是字符的数组
只有他所指的字符数组有结尾的0,才说所指的是字符串
字符串的输入输出
举例 char string[8];
scanf("%s",string);
printf("%s",string);
scanf读入一个单词到空格,tab或回车为止,但是scanf不安全,不知道要读入的长度
***安全的输入:
char string[8];
scanf("%7s",string);
在%和s之间的数字表示最多允许读入的字符的数量,这个数字应该比数组的大小小1
***常见错误
误把char* 当作字符串类型,定义一个字符串类型的变量string就开始使用,由于没有对string初始化0,不一定能每次运行
空字符串"" char butter[100]="";
char butter[]="" 这个数组长度只有1
字符串数组
char**a a是一个指针,指向另一个指针,那个指针指向一个字符或字符串
单字符输入输出
putchar
int putchar(int c);向标准输出写一个字符,返回写了几个字符,EOF(-1) 表示写失败
getchar
int getchar(void);从标准输入读入一个字符,返回类型是int是为了返回EOF(-1)
windows-->Ctrl-Z Unix-->Ctrl-D
在电脑和编写程序之间有一个shell,当你输入Ctrl d时shell会在程序后面输入-1,结束程序,当你输入Ctrl c时shell会关闭程序
头文件string.h包含的函数
strlen size_t strlen(const char*s);//const的作用是告诉你字符串有多长,并不会修改字符串
返回s的字符串长度(不包括结尾的0)
strcmp 比较两个字符串,int strcmp(const char* s1,const char *s2);
返回0 s1==s2
1 s1>s2
-1 s1<s2
strcpy 把src的字符串拷贝到dst ,restrict表明src和dst不重叠,返回dst,为了能链起代码来
char * strcpy(char restrict dst ,const charrestrict src)
我们经常拿strcpy进行复制一个字符串
char dst=(char *)malloc(strlen(src)+1);
strcpy(dst,src);
用strcpy举例子其中一种
include<stdio.h>
include<string.h>
char *mycpy(char *dst,const char *src){
int idx=0;
while(src[idx]){
dst[idx]=src[idx];
idx++;}
dst[idx]='\0';
return 0;}
如果用指针
include<stdio.h>
include<string.h>
char* mycpy (char *dst ,const char *src){
char *ret=dst;
while(*dst++ = *src++)
;
*dst ='\0';
return 0;}
strcat
strchr在字符串中找字符
char *strchr(const char *s, int c);
char*strrchr(const char *s,int c); 从右边开始
返回NULL表示没有找到
strstr 字符串中找字符串
char *strstr(const char *s1,const char *s2);
char* strcasestr(const char *s1,const char *s2);

浙公网安备 33010602011771号