读取一行或多行,在N列的之前最后的空格处换行。。。
遵从自顶向下的编程思想,先想好main函数里要实现的功能,然后再想函数具体的是实现方法。
#include
#define MAXLEN 10
#define TABSIZE 4
char line[MAXLEN];
int extable(int pos); //把table转换成空格展开
int findblk(int pos); //从后往前寻找空格处
void printl(int pos); //打印line数组中的字符
int newpos(int pos); //把空格后到MAXLEN的字符移到line的最前面最后line的开始
int main(void)
{
int c,pos;
pos = 0;
while((c = getchar()) != EOF){
line[pos] = c;
pos ++;
if(c == '\t'){
pos = extable(pos);
}else if(c == '\n'){
printl(pos);
pos = 0;
}else if (pos >= MAXLEN){
pos = findblk(pos);
printl(pos);
pos = newpos(pos);
}
}
return 0;
}
/*
将table展开转换成空格,存入line数组
*/
int extable(int pos)
{
line[pos] = ' ';
while(++pos && pos < MAXLEN && (pos % TABSIZE != 0))
line[pos] = ' ';
if(pos < MAXLEN)
return pos;
else{
printl(pos);
return 0;
}
}
/*
打印line数组中的内容
*/
void printl(int pos)
{
int i;
for(i = 0;i < pos;i ++){
putchar(line[i]);
}
if(pos > 0)
putchar('\n');
}
/*
从后寻找line中最后出现空格的地方
*/
int findblk(int pos)
{
int i = 0;
while(pos > 0 && line[pos] != ' '){
pos --;
}
if(pos == 0)
return MAXLEN;
else
return pos+1;
}
/*
将空格后的字符移到line的最前面
*/
int newpos(int pos)
{
int i,j = 0;
if(pos < 0 || pos > MAXLEN){
return 0;
}else {
for(i = pos;i < MAXLEN;i ++){
line[j] = line[i];
j ++;
}
return j;
}
}
阅读(786) | 评论(0) | 转发(0) |