C语言:学习笔记(二)
10. 一维数组排序的两种不同的方法
1 for (i=5;i>0;i--) 2 for (j=0;j<i+1;j++) 3 if (a[j]>a[j+1]) { 4 m=a[j];a[j]=a[j+1];a[j+1]=m; 5 }
1 for (i=0;i<5;i++) 2 for (j=i+1;j<6;j++) 3 if (a[i]>a[j]) { 4 m=a[i];a[i]=a[j];a[j]=m; 5 }
运算步骤构成图:
11. 两数交换引入第三个量
12. 给字符数组赋值
如果赋值没有赋完,则需要在最末元素用 \0, 例如:char str[5]={'a', 'b', 'c', '\0'}; 如果赋全值,则\0可以省略。例如: char str[]={'n', 'j', 'm', 'w',};
字符串赋初值。char a[]="chinese"; 系统自动添加 \0。
char a[]={"chinese"} 也是对的。
char a[10]="China"; 这样的赋值只有在赋初值的时候才能出现,其他情况都会出现错误,例如 char a[10]; a="Chinese";
13.字符数组在内存中占有多少字符?
在内存中会用到数组长度+1个字符。
14. 字符数组中,scanf("%s", a) 不再需要在字符数组名前加 &。因为a本身就是地址。
15. 当%s 遇到空格或者回车
printf("%s") 输出字符,直到遇到 \0为止,而sanf("%s") 遇到空格或者回车都属于数据的分隔符而不能被读入。
16. gets(字符数组) 和 puts(字符数组)
gets会把空格读入,直到遇到回车,在字符串后自动加上 \0。
puts输出字符串,直到遇到 \0。
17. strcat(字符串1, 字符串2)
strcat()会找到第一个字符串末尾的 \0,然后用第二个字符串的头覆盖它。
第一个字符串要有足够的长度。否则不能容下第二个字符串。情况真是这样么?完全不是,只需要第一个字符数组有赋值,未赋值则会出现越界。那种情况只有在通过for循环实现粘合功能的时候。
注意:这里两个参数不能是字符串常量。例如:strcat("I am", "workers")
18. strcpy(字符串1, 字符串2)
把第二个字符串拷贝到第一个字符串中。
19. strcmp(字符串1, 字符串2)
按照ASCII比较两个字符串。内容和长度都要想等。
str1==str1:return 0
str1 > str2:return 正整数
str1 < str2:return 负整数
char a[3]={'a', 'b'}, b[2]={'a', 'b'}; if (strcmp(a, b) == 0) printf("OK"); /*答案是 "OK"*/
两个字符串数组长度不同,一个是3,另一个是2。但是它们在比较的时候,却相等。
20. strlen() 和 sizeof()
计算字符串中有意义的字符,不包括 \0 和 空字符(null)。那些没有被有效字符填充的数组元素。
sizeof() 计算字符串数组在内存中的真实长度。
21 strlwr() 和 strupr()
变大写、变小写
22. 如果字符数组的长度大于所赋的值的长度。在printf()的时候,后面的空位不会出现,而是遇到 \0 就会停止。