|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 henrywsnew 于 2012-5-29 16:40 编辑
B.W.Kernigham 和D.M.Ritchie 写的c程序设计语言一 书中:编写程序将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变
#include<stdio.h>
#define TABINC 8
int main(void)
{
int c,nb,nc;
nc=0; // 字符个数
nb=0; // 空格个数
while((c=getchar())!=EOF) {
if (c==' ') {
++nc;
if (nc%8!=0)
++nb;
else{
putchar('\t');
nc=0;
nb=0;
}
}
else if (c=='\n'||c=='\t'){
putchar(c);
nc=0;
nb=0;
}
else {
while(nb>0) {
--nb;
putchar(' ');
}
putchar(c);
++nc;
}
}
return 0;
}
上面是我自己写的,下面是书上给的答案,看不明白,尤其是else if (c=='\t')
pos=pos+(TABINC-(pos-1)%TABINC)-1;这一句,我觉得我写的比答案好,但是不能肯定我的一定对,因为有很多种情况我不可能都试过(只是在键盘上乱输了一些句子,输出也正确。)请各位老师看看。如果我的程序有问题的话是在哪里?
/*
#include<stdio.h>
#define TABINC 8
int main(void)
{
int c,nb,nt,pos;
nb=0;
nt=0;
for (pos=1;(c=getchar())!=EOF;++pos)
if(c==' '){
if (pos%TABINC!=0)
++nb;
else {
nb=0;
++nt;
}
}
else {
for (;nt>0;--nt)
putchar('\t');
if (c=='\t')
nb=0;
else for (;nb>0;--nb)
putchar(' ');
putchar(c);
if (c=='\n')
pos=0;
else if (c=='\t')
pos=pos+(TABINC-(pos-1)%TABINC)-1;
}
return 0;
}
*/ |
|