其他参考:
一,字符
类型:char
输入:getchar
输出:putchar
示例:
#include <stdio.h>
void main()
{
char ch;
while (ch = getchar())
{
if (ch == EOF)break;
printf("%d", ch);
putchar(ch);
}
return;
}
运行结果:(8行)
a^Zb
97a
26
a
97a
10
^Z
解释:
输入a^Zb并回车,输入了2个字符a和^Z,再输入a并回车,输入了2个字符a和换行符,再输入^Z程序结束
注1:
'\0'的ASCII码是0,‘^A’ - '^Z' 的ASCII码是1-26,其中换行符'\n'的是10,'^Z'的是26,但是当输入缓冲区为空时'^Z'出现在'\n'之后时,'^Z'的ASCII码是-1,表示文件结尾end of file
注2:
EOF是常量-1,OJ输入输出经常用EOF来控制。
注3:
10号'\n'和26号'^Z'都是getchar的截断,输入一行字符串,getchar只能读取到第一个'\n'或'^Z',后面如果还有就丢弃
二,字符串
1,字符串的表示
c语言中,字符串用char数组表示,字符串末尾加上'\0'表示结束
2,输入输出
输入:gets
输出:puts
示例:
#include <stdio.h>
#include<string.h>
void main()
{
char str[]="abcde";
puts(str);
gets(str);
printf("%d\n", strlen(str));
puts(str);
return;
}
运行结果1:(4行)
abcde
^Za
5
abcde
运行结果2:(5行)
abcde
a^Zb
2
a?
可以看出,换行符和^Z都是gets函数的截断,区别在于
换行符会被gets读取并丢弃,而gets对^Z的处理和getchar一样,缓冲区为空时就是-1号字符,缓冲区不为空时就是26号字符
3,strcat函数——字符串连接
string catenate字符串连接
示例:
#include <stdio.h>
#include<string.h>
void main()
{
char str1[10] = "ab";
char str2[] = "cd";
printf("%d %d\n", strlen(str1), strlen(str2));
strcat(str1, str2);
printf("%d %d\n", strlen(str1), strlen(str2));
printf("%s %s", str1, str2);
return;
}
运行结果:
2 2
4 2
abcd cd
strcat(str1, str2)函数就是把str2复制到str1后面
4,strcpy和strncpy函数——字符串复制
strcpy(str1,str2)把str2复制到str1的位置
strncpy(str1,str2,n)把str2的前n个字符复制到str1的位置
5,strcmp函数——字符串比较
strcmp(str1,str2)是按照字典序比较,返回值>0,=0,<0分别表示str1>str2,str1==str2,str1<str2
6,strlen和sizeof——字符串长度
sizeof是关键字,计算的是数组长度
strlen是函数,计算的是字符串中字符数目,不包括'\0'
7,strlwr和strupr函数——字符串大小写
strlwr是把大写字母换成小写字母
strupr是把小写字母换成大写字母