博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将长输入行折叠成若干较短的行
阅读量:6072 次
发布时间:2019-06-20

本文共 2321 字,大约阅读时间需要 7 分钟。

问题描述很简单,就是限制每行的最大字符数量,如果超过了这个数,将多出来的部分折叠到下一行,下一行照样重复上述步骤,直到折叠完毕。

这里要考虑的问题有:

1、一旦判断到当前读取的字符数量已经到了限制值,我就要插入一个'\n'用来换行;

2、如果当前超过限制的位置是一个单词的内部,比如说读到“hello”这个单词的'e'位时到了限制位,那么不可能直接在这里插入'\n'换行,怎么办?

结合上面的思考,我们可以设定三个临时变量用来指明特定的数组下标:

1、current,指定当前读取到的位置;

2、location,指定当前行读取到的位置;

3、spaceholder,指定当前找到的空格' '的位置。

在遍历过程中,current是要走完全程的;location的最大值就是限制值(比如10),一旦完成一次折叠,location将被重置为0;而spaceholder则是记录当前最新的有' '空格的位置,这样我们在折叠时就不用担心会在词汇中间插入'\n'换行而导致单词被意外地分开。

我们可以通过自己写getline函数来收录从stdin中输入的字符。

1 //NeroHwang 2 //2014-2-27 3  4 #include 
5 #include
6 #define MAXLINE 1000 7 const int MAXFOLD = 10; //Limit the max fold pos as 10 8 int GetLine(char line[],int maxline); 9 10 int main(void)11 {12 //1,i_current,indicate the current index of the whole string.13 //2,i_location,indicate the current pos in a line14 int i_current,i_location;15 int len;16 int i_spaceHolder; //Hold for the current pos which is a blank' '17 char line[MAXLINE];18 if((len = GetLine(line,MAXLINE)) >0)19 {20 if(len < MAXFOLD)21 {22 //do nothing23 }24 else25 {26 //there is some extra long lines27 i_current = 0;28 i_location = 0;29 while(i_current < len)30 {31 if(line[i_current] == ' ')32 {33 i_spaceHolder = i_current;34 }35 if(i_location == MAXFOLD) //As soon as we find the pos needs to be folded...36 {37 line[i_spaceHolder] = '\n';38 i_location = 0; //Reposition39 }40 ++i_current;41 ++i_location;42 }43 }44 printf("%s\n",line);45 }46 return 0;47 }48 49 int GetLine(char line[],int maxline)50 {51 assert(line != NULL && maxline <= MAXLINE && maxline >0);52 char c;53 int i;54 //Atention Here.Don't use getchar twice in for loop.55 for(i = 0; i < maxline-1 && (c=getchar())!= EOF && c!= '\n'; ++i)56 {57 line[i] = c;58 }59 if(c =='\n')60 {61 line[i] = c;62 ++i;63 }64 line[i] = '\0';65 return i;66 }

最后给出测试结果:

转载于:https://www.cnblogs.com/nerohwang/p/3571590.html

你可能感兴趣的文章
NoSQL 学习笔记
查看>>
Java BIO、NIO、AIO 比较
查看>>
webservice ssl 2 keyStore和truststore区别
查看>>
设置textarea的光标
查看>>
通过HttpWebRequest 发送 POST 请求实现自动登陆
查看>>
C语言——输入输出
查看>>
Hadoop家族学习路线图(转)
查看>>
工具仓库
查看>>
java 自动拆箱 自动装箱
查看>>
Docker入门学习二之安装Docker
查看>>
04-利用思维导图梳理JavaSE-面向对象(基础篇)
查看>>
【边缘检测 v0.7beta】——献给我的大学
查看>>
创建定性用户画像
查看>>
Dojo:不容忽视的RIA框架
查看>>
cygwin+NDK基本使用
查看>>
File类——File对象常见功能
查看>>
jsp中的类似 if - else 语句 的语法
查看>>
微信小程序开发指引
查看>>
视角 | 微服务的数据一致性解决方案
查看>>
百度停止社招
查看>>