————————————————————格式说明符(不知道全不全的大全)————————————————————
https://blog.csdn.net/overstep1024/article/details/44703083
————————————————————————数据类型————————————————————————————
https://blog.csdn.net/wfreehorse/article/details/60589326
—————————————————————————字符串————————————————————————————
字符串是什么?
字符串(要注意字符串和字符数组的区别)就是由字符组成的连续的有序排列(其实非常简单)为了区分字符用单引号圈起来所以 字符串用双引号圈起来。且字符串以0来标志字符串的结束 ex:"a"=='a'+'0'
在c中字符串以数组的形式存在,不同的是不能用运算符对字符串做运算
编译器会在字符串结尾补一个0,这个0呢并不会计算在字符串的长度里,但在字符数组中0会被当成一个数组单元计算在字符数组的长度里
系统会直接分配一部分的内存来存放这个字符串,而指针会指向他。所以用指针的形式创立的数组是only-read不能修改。
用数组的方式创立字符串则可以直接修改(当然因为数组无法被赋值,需要用到遍历)
———————————————————————空字符串—————————————————————————————
连续的双引号代表空字符串 char[ ]="",不管括号里啥,只有char[0]="0"这是作为字符串结尾的0,这个数组长度只有1
二维数组(?)的第二位必须要有具体的值,并不确定这样写法的名字,就上个图清新易懂。
—————————————————————putchar函数与getchar函数————————————————————————
putchar函数原型:
int putchar(int c) →向标准输入写入一个字符
getchar函数原型:
int getchar(void)→向标准输入读入一个字符
—————————————————————c语言的字符串函数库—————————————————————————
调用这些函数需要加上头文件 #include
strlen函数原型 strlen(const char*)返回字符串的长度 不包括字符串结尾0(与sizeof不同,sizeof会把0也算进返回的长度里)
strcmp函数原型 strcmp(const char*s1,const char*s2)对2个数组进行比较然后return, 0, 1 ,-1
0:s1==s2 如果输出了这3个数以外的值N,那么N表示S1和S2相差多远(用ASCN2码表计算)
1:s1>s2 永远是S1比较S2,不可能是S2比较S1
-1:s1 strcpy函数原型 strcpy(char*restrict dst(目的地),const char*restrict src(源头)) cpy是copy的意思,顾名思义将src的字符串拷贝到dst的位置上 restrict:说明dst和src不重叠(如果重叠则不要使用strcpy很危险) return的是dst 小套路→复制一个字符串 strcat函数原型 strcat(char*restrict dct,const char*restrict src) 将src字符串连接到dct字符串的后面形成一个新的长字符串 但是strcat和strcpy都具有危险(尤其是strcat,如果接入的空间不够呢)因此我们需要做一些安全保证。 strchr函数原型 char*strchr(const char*s,int c) 从左至右寻找s字符串的首地址 return NULL→没找到 ,非NULL→找到 strrchr(多一个r)函数原型 char*strchr(const char*s,int c) 从右至左寻找s字符串的首地址 return NULL→没找到 ,非NULL→找到 返回的都是指针 字符 ASCII 以数值存储 0-255
字符的表示:要加单引号
a 变量 1数值
'a' 字符 '1'字符
不可见字符的表示
'\n' 回车
'\0' 结束符
' ' 空格
'a' = 97 'A' = 65 'a' - 'A' =32 '0'= 48
小写字符-大写字符=32
'0'字符转成数值0的方式
'0' -'0' =0
数字字符变量x转成对应数值y
char x;
int y;
y=x-'0';
如何判断某个字符变量x是字母字符
if( (x>='a' && x<='z' ) || (x>='A' && x<='Z' ) )
如何判断某个字符变量x不是字母字符
if( !( (x>='a' && x<='z' ) || (x>='A' && x<='Z' ) ) )
如何判断某个字符变量x是数字字符
if (x>='0' && x<='9' )
判断空格
if(x==' ')
字符与数值之间可以转换输出
例1:
char x='a';
printf("%d",x); //会输出97
例2:
char x=97;
printf("%c",x); //会输出a
例3:
int x=97;
printf("%c",x); //会输出a
整数数据(在前)与字符(在后)同时输入的方式:
char x;int y;
scanf("%d %c",&y,&x);
PS:cin,scanf不能输入空格、换行两种字符
gets可以接收空格,不能输入换行字符
getchar() 才可以接收任意字符
字符串的输入char s[100];
(1) scanf("%s",s); //字符串的数组名为字符串的首地址,所以不要地址符
(2) gets(s);
(3)逐个输入以换行结束
char s[100],c;
int i=0;
for( ; ; )
{
c=getchar(); //或者 scanf("%c",&s[i]); //单个变量,输入的时候要加地址符
if(c=='\n') {s[i]='\0'; break;}
}
(4)例:输入多行字符给字符数组s ,以@结束
char s[100],c;
int i=0;
while( (c=getchar())!='@' )
{
s[i]=c;
i++;
}
printf("%s",s);
字符串的输出方式多种多样
(1)printf("%s",s); //没有输出换行
(2) for(i=0;s[i]!='\0';i++)
putchar(s[i]); //printf("%c",s[i]);
(3)len=strlen(s); //求出字符串长度len
for(i=0;i<=len-1;i++)
putchar(s[i]);
(4)puts(s); //有输出换行