1c语言中有些允许用直接的方法表示字符,列如回车符,它是‘\n’,而空字符是‘\0’,,它也是c语言中的字符串的结束符。其他例子‘\\’(注意必须包括2个反斜杠),‘\'’这个单引号,甚至还有些字符它有2种写法,‘\’’‘和’‘’‘是都表示双引号,像这种以反斜杠开头的字符称为转义序列。
2总结字符串是特殊的整数,对应ascii表
3c语言中的字符型用关键字char表示,在语法上可以把字符当做int型使用。
4scanf(“%s”,s),s前面没有&号。如果是字符串数组char s【MAXN】【MAXN】,可以用scanf(“%s”,s【i】)读取第i个字符串
5.每个竖式需要打印7行,但不一定要用7条printf语句,1条足了。我们首先计算出x=abc*d,然后是第2行y=abc*d最后是总乘积z=abc*de,然后一次性打印出来
6注意%5d,它表示按照五位数打印,不足五位在前面补空格
%3d--可以指定宽度,不足的左边补空格 %-3d--左对齐 %03d---一种左边补0 的等宽格式,比如数字12,%03d出来就是: 0127sprintf函数似曾相识:printf是输出到屏幕,fprintf是输出到文件,而sprintf输出到字符串。多数情况下,屏幕总是可以输出的,文件一般也能写(除非磁盘或者硬件损坏),但字符串就不一定了,你应该保证写入的字符串有足够的空间(字符个数+1),应为c语言的字符串是以空字符‘\0’结尾的,如果算不清楚,就把数组放大一点,空间够用的情况下浪费一点没关系
8,strlen(s)的作用是获取字符串s的实际长度。字符数组的s的大小是20,但并不是所有空间都用上了,如果输入的是“2357”,那么实际上s只保存了5个字符(不要忘记还有一个结束标记‘\0’),后面15个字符是不确定的(应为变量在赋值之前是不确定的)。strlen(s)返回的就是结束标记之前的字符个数,因此这个字符串中的各个字符依次是s【0】到s【srlen(s)-1】,而s【strlen(s)】正是结束标记‘\0’
9字符串的实质是数组,它只能用strcpy(a,b),strcmp(a,b),strcat(a,b)来执行赋值,比较和连接工作,上述函数都在string.h中声明
#include <stdio.h>
int main(){
int count=0;
printf("%d %d %d\n",count++,count++,count++);
return 0;
}
该程序的输出结果是2 1 0所以不可以烂用count++和++count
另一个例子是count=count++;我们队count++的解释是:count++本身的值是加1之前的值(即原来的值)。如果是计算完赋值的右边(即count++)之后就立刻执行,最后count的值不会变(应为最后执行的是赋值操作);但如果是整个赋值完成之后才加1,最后count的值会比原来多1,所以我们尽量避开用它
10.注意:滥用++,- -,+=,-=等可以修改变量值的运算符很容易带来隐蔽的错误,建议每条语句最多用一次这种运算符,并且它所修改的变量在整条语句中只出现一次
而且用-Wall编译刚才的例子,编译器会给出警告:对count的运算可能是没有定义的,但是有些错误程序使合法的
11.strchr函数的作用是在一个字符串中查找单个字符
sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
将整形的数输出到字符串buf,整形4个字节,字符型1个字节,应该如何存储。例如abc=123,de=45,x=6,y=7,z=8,则buf的应该变成怎么样。
从内存角度 首先 你开辟了个99字节的字符型数组 他们的初始值是99个随机值 然后你在字符串里面打印123 45 6 7和8 因为字符型变量里存的都是ASCII码,所以这几个整数会被拆成单个字符方便储存 于是就拆成了 1 2 3 4 5 6 7 8 然后转换成对应的ASCII码 48 49 50 51 52 53 54 55 分别存在buf[0] buf[1]....buf[7]中 最后在buf[8]中输入\0结束
用字符数组存储两位或以上的数字都要把个位十位等拆成个位数来存储是吧?
可以这么理解,但也不全 因为“字符”这个类型就是为了输出到屏幕上而定义的, 所以才要拆成一个个。 但如果你拿“字符“这个类型直接储存整数,也不是不可以,因为char和int可以互相转换。 但如果你要输出到屏幕上,就必须转换成对应的ASCII码才能正常输出。