1-8
统计文本各种字符的数目,字符集属于整型的子集合,
#include <stdio.h>
main()
{
int c, nb, nt, nl;
nb = 0;
nt = 0;
nl = 0;
while ((c=getchar()) != EOF) {
if (c == ' ') {
nb++;
} else if(c == '\t'){
nt++;
}else if(c =='\n'){
nl++;
}
}
printf("%d %d %d\n", nb, nt, nl);
}
程序实现,当输入的字符与待定的值相同就累加一次。
1-9
删除多余空格的程序
#include <stdio.h>
#define NONBLANK 'a'
main()
{
int c, lastc;
lastc = NONBLANK;
while ((c=getchar()) != EOF) {
if (c != ' ')
putchar(c);
if (c == ' ')
if(lastc != ' ')
putchar(c);
lastc = c;
}
}
//另外一种实现
#include <stdio.h>
#define NONBLANK 'a'
main()
{
int c, lastc;
lastc = NONBLANK;
while ((c=getchar()) != EOF) {
if (c != ' ' || lastc != ' ')//因为lastc != ' ',已经确定上次输入非空格,
putchar(c);
lastc = c;
}
}
实现原理, 把非空格的直接打印,并记录当前值b,输入值与b比较,都是空格则不打印。
1-10
替换并打印。
#include <stdio.h>
main()
{
int c;
while ((c=getchar()) != EOF) {
if (c != '\t')
printf("\\t");
if (c == '\b')
printf("\\b");
if(lastc != '\\')
printf("\\\\");
if(c !='\b'&&c != '\t' && c != '\\')
putchar(c);
}
}
对于空白符的描述做了约定tab=='\t', spac==' ',=\当输入值与特殊值相同,则输出要替换的字符,否则原样输出。
1-11
程序思维,注意事项, 处理没有数据输入的情况,只有换行符,,只有空格,制表符,没有空格,首列就是单词。
1-12
将输入的单词每行打印一个。
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c, state;
state = OUT;
while ((c = getchar()) != EOF) {
if(c ==' ' || c == '\n' || c == '\t')
{
if(state = IN)
{
putchar('\n');
state = OUT;
}
}
else if(state == OUT)
{
state = IN;
putchar(c);
}else
putchar(c);
}
}
赋值单词外,判断输入是否空白字符,是空白,原先是否单词中,决定是否换行,输入非空字符,原先是否单词中,取反,并打印字符。