•  题目来源:《The C programming language》中的习题
  •  练习1-22:编写一个程序,把较长的输入行‘折’成短一些的两行或者多行,折行的位置在输入行的第n列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及在指定的列前有空格或制表符时的情况。

  思路:

  我们可以这样理解题目,每隔n列就需要换一次行,但是字符数目不一定是n个,因为分割的位置是第n列之前的最后一个非空格之后(注意:这里是【最后一个非空格之后】,意思是从后往前的查看字符的时候遇到的第一个非空格字符,我看到网上有些代码貌似在这里理解出了问题),这样就可能会出现在第n列之前的结尾处有多个空格,如果是这样的话,这些空格就成为了下一行的字符。这里提到第n列所以需要把所有的\t都换位空格,以保证是按照列计算的。所以,我们需要把输入的字符都放入一个字符数组中,并将\t转换为空格。接下来,我们再对这个字符数组进行处理。每次处理,我们都会按顺序从中取出n个字符,并且对于没有使用的字符(就是结尾是空格的字符)放到下一行的字符中。

  C语言实现代码:

#include<stdio.h>
#define MAX_LEN 1000
#define TABLEN 8
#define SEPNUM 10 int getCol(char charArr[MAX_LEN],int start,int index); //主函数
void main(){
int c,i,index,nbs,pos;
char charArr[MAX_LEN];
index=;
nbs = ;
while((c=getchar())!=EOF && c!='\n'){
if(c=='\t'){ //制表符替换为空格
nbs = TABLEN-(index+)%TABLEN;
for(i=;i<=nbs;i++){
charArr[index]=' ';
index++;
}
}else{
charArr[index]=c; //保存字符
index++;
}
}
index--;
pos=;
while(pos<=index){
pos = getCol(charArr,pos,index);
} } //该函数用于获取n个字符,并输出最后一个非空字符(包括该字符)之前的字符,返回紧跟该非空字符之后的空格的位置
int getCol(char charArr[MAX_LEN],int start,int index){
int end,pos,i,tmp;
tmp = start+SEPNUM-;
pos = ;
if(tmp>index){
end = index;
}else{
end = tmp;
}
for(i=end;i>=start;i--){
if(charArr[i]!=' '){
pos = i;
break;
}
}
if(pos>){
for(i=start;i<=pos;i++){
putchar(charArr[i]);
}
putchar('\n');
return pos+;
}else{ //该n个字符全部为空格的情况
return end+;
}
}

  备注:代码是按照自己对题意的理解来写的,如果哪里写的不对,还请多多指教~

最新文章

  1. C#之事件
  2. Qt 静态编译后的exe太大, 可以这样压缩.
  3. 分词工具ICTCLAS5.0使用心得
  4. iOS键盘出现时界面跟着往上推
  5. 经典的SQL面试题
  6. [转载] google mock cookbook
  7. SQL Server2008附加数据库之后显示为只读
  8. codeforces 651A Joysticks
  9. Spring ApplicationContextAware获取上下文
  10. 异步请求HTTP
  11. Vue实现勾选后向数组都添加
  12. Python的基础学习(第二周)
  13. 【Linux】使用Nginx发布dotnet的网站
  14. 查看当前Jquery版本
  15. JS生成URL二维码
  16. JavaScript 匿名函数
  17. PHP APP端支付宝支付
  18. Ubuntu18.04更换国内源
  19. OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口
  20. timestamp 字段

热门文章

  1. Sublime 3156 LICENSE key
  2. C++ 构造与析构的执行顺序
  3. Javascript 的模块化编程及加载模块【转载+整理】
  4. Android 之 PackageManager获取的应用程序信息与AndroidManifest文件中设置的信息不一致问题
  5. Linux中使用ps、awk、sh一起批量杀死所有的dotnet进程。
  6. 跟我学AngularJS:全局变量设置之value vs constant vs rootscope vs 服务[转]
  7. IDEA Run/Debug Configurations 中点击“+”号没有tomcat server选项
  8. Linux下利用signal函数处理ctrl+c等信号
  9. AppScan--图解Web扫描工具IBM Security App Scan Standard
  10. Configuring the launch of the remote virtual machine to debug