第7周 C语言程序设计(新2版) 练习1-22 在第n列将较长输入行折短
2016-05-13 15:13
453 查看
问题及代码:
运行结果:
/*把较长的行,折成二行或多行, 位置在第n列前的最后一个非空格字符之后. 这个程序将把制表符扩展为空格,每遇到 一个换行符就把此前的输入文本打印出来, pos达到MAXCOL时折叠。*/ #include<stdio.h> #define MAXCOL 10 //输入行的折行位置,即第n列 #define TABINC 8 //空白增量大小,为何定义这个 int i,c; char line[MAXCOL]; //输入行 int exptab(int pos); int findblnk(int pos); int newpos(int pos); void printl(int pos); //函数功能是什么? int main() { int c,pos; pos=0; //输入行位置 while((c=getchar())!=EOF) { line[pos]=c; if(c=='\t') pos=exptab(pos); else if(c=='\n') { printl(pos); pos=0; } else if(++pos>=MAXCOL) { pos=findblnk(pos); printl(pos); pos=newpos(pos); } } } /*打印输入行直到pos位置的字符*/ void printl(int pos) { int i; for(i=0;i<pos;i++) putchar(line[i]); if(pos>0) putchar('\n'); //注意别忘记了换行符 } /*扩大空白标签*/ int exptab(int pos) { line[pos]=' '; for(++pos;pos<MAXCOL&&TABINC!=0;++pos) line[pos]=' '; if(pos<MAXCOL) return pos; else { printl(pos); return 0; } } /*倒退着找一个空格位置,保证折叠处单词完整*/ int findblnk(int pos) { while(pos>0&&line[pos]!=' ') --pos; //退着找空格 if(pos==0) //行里没有空格? return MAXCOL; else return pos+1; //空格符后面的下标位置 } /*调整输入行,将把从位置pos开始 的字符复制到下一个输入行开始, 再返回变量pos的新值*/ int newpos(int pos) { int i,j; if(pos<=0||pos>=MAXCOL) return 0; //没有安排 else { i=0; for(j=pos;j<MAXCOL;j++) { line[i]=line[j]; i++; } return i; } }
运行结果:
相关文章推荐
- 数字字符串转换成数值
- 一个简单的Java命令行添加/删除联系人程序(仿C语言)
- POJ 2236 Wireless Network(并查集)
- 2014年第五届蓝桥杯C/C++程序设计本科B组决赛
- 2014年第五届蓝桥杯C/C++程序设计本科B组决赛 殖民地(编程大题)
- 2014年第五届蓝桥杯C/C++程序设计本科B组决赛 Log大侠(编程大题)
- C++智能指针详解
- c++ 赋值操作符
- C++ 引用和指针的区别
- 第一节课作业
- 关于log4cpp
- 详解C/C++语言中Static 变量 或者 static函数的作用
- c++模板(二)---------类模板
- C++ Cross Platform Memory Leak Detector
- C语言第一次课
- *C语言有关指针的变量声明中的几个易错点
- c++中sort对结构体排序
- Mac上配置C++ Eclipse 尤其是GDB错误
- C++函数参数中引用和指针区别
- C++中如何返回一个数组以及可能会遇到的问题geekband