第1章 导言
1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h>
int main() { int c; int flag = 0; while((c = getchar()) != EOF){ if(c == ' '){ if(flag == 0) { putchar(c); flag = 1; } } else{ flag = 0; putchar(c); } } }
|
1-10 编写一个将输入复制到输出的程序,并将其中的制表符替换为\t
,将回退符替换为\b
,将反斜杠替换为\\
。这样可以将制表符和回退符以可见的方式显示出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h>
int main(){ int c; while((c = getchar()) != EOF){ if (c == '\t') { putchar('\\'); putchar('t'); } else if(c == '\b') { putchar('\\'); putchar('b'); } else if(c == '\\') { putchar('\\'); putchar('\\'); } else putchar(c); } return 0; }
|
1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <stdio.h> #define IN 1 #define OUT 0 #define MAXLEN 20
int main(){ int status = OUT; int data[MAXLEN] = {0}; int c, nc = 0; while((c = getchar()) != EOF){ if(c == ' ' || c == '\t' || c == '\b'){ status = OUT; ++data[nc]; nc = 0; } else if(status == OUT) { status = IN; ++nc; } else{ status = IN; ++nc; } } for(int i = 0; i < MAXLEN; ++i){ printf("len %d: ", i); for(int j = 0; j < data[i]; ++j) printf("-"); printf("\n"); } return 0; }
|