其他参考:



一,字符

类型: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是把小写字母换成大写字母