•  题目来源:《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+;
}
}

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

【C语言】练习1-22的更多相关文章

  1. C语言 编程练习22题

    一.题目 1.编一个程序,输入x的值,按下列公式计算并输出y值: 2.已知数A与B,由键盘输入AB的值,交换它们的值,并输出. 3.给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位 ...

  2. C语言 编程练习22

    一.题目 1.编一个程序,输入x的值,按下列公式计算并输出y值: 2.已知数A与B,由键盘输入AB的值,交换它们的值,并输出. 3.给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位 ...

  3. 深入浅出数据结构C语言版(22)——排序决策树与桶式排序

    在(17)中我们对排序算法进行了简单的分析,并得出了两个结论: 1.只进行相邻元素交换的排序算法时间复杂度为O(N2) 2.要想时间复杂度低于O(N2),算法必须进行远距离的元素交换 而今天,我们将对 ...

  4. C语言基础:枚举.宏 分类: iOS学习 c语言基础 2015-06-10 22:01 20人阅读 评论(0) 收藏

    枚举:一组有符号的整型常量,一 一列举所有的状态 枚举常和switch连用 enum week{ monday=1, tuesday, wednesday, thursday, friday, sat ...

  5. C语言面试题22. 链表中倒数第k个节点

    要求:输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...

  6. 关于数据结构的10个面试题(c语言实现)

    关于数据结构的10个面试题(c语言实现) 2010-04-21 22:17 5702人阅读 评论(0) 收藏 举报 数据结构面试c语言bttree 1.         输入一个链表的头结点,从尾到头 ...

  7. C语言完美体系

    **第 1 篇 C 语言第一阶段 13 1.1C 语言第一阶段--语言课程概述 13 1.1.1 什么是语言,什么是 C 语言 13 1.1.2 基本常识 14 1.1.3 人与计算机之间的更好的交互 ...

  8. C 语言经典100例

    C 语言经典100例 C 语言练习实例1 C 语言练习实例2 C 语言练习实例3 C 语言练习实例4 C 语言练习实例5 C 语言练习实例6 C 语言练习实例7 C 语言练习实例8 C 语言练习实例9 ...

  9. 【转】 解读EOF

    解读EOF 标签: fplinuxc语言filestream 2012-01-31 22:05 439人阅读 评论(0) 收藏 举报  分类: C.C++_程序设计(20)  我学习C语言的时候,遇到 ...

  10. C++的MFC,与C#的.NET

    转载:http://blog.sina.com.cn/s/blog_7f5bde5c0101hk5n.html 以下摘自各问答网站.博客论坛: [1]MFC早已过时,现在C++多数是用来编写底层方法而 ...

随机推荐

  1. ASP入门(二十一)- 如何自己获取 ADO 连接字符串

    1.新建一个文本文件,并将文件名修改为[ado.udl] 注意 如果不显示扩展名,请在资源管理器的[查看 | 选项]对话框中去掉"隐藏已知文件类型的扩展名"勾就可以了. 2.双击这 ...

  2. [海蜘蛛] 海蜘蛛 V8 全线无限试用版 免费发布破解教程

    http://bbs.p52.cn/forum.php?mod=viewthread&tid=3499&extra=page%3D1&page=1&_dsign=79c ...

  3. 离线LCA学习

    题目1 : 近期公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 上上回说到,小Hi和小Ho用很拙劣--或者说粗糙的手段山寨出了一个奇妙的站点,这个站点能 ...

  4. VCAP5-DCA – What’s new?

    see also: 韩国人的教材:http://ddii.pe.kr/ Section 1.1 – Implement and Manage complex storage Determine use ...

  5. 安装MySQL-python报错:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory或者 build\lib.win-amd64-2.7\_mysql.pyd : fatal error LNK1120: 56 unresolved externa

    解决办法1: 直接下载MySQL-python-1.2.5.win-amd64/32-py2.7.exe,点击安装 此处要注意自己安装的Python和MySQL版本是64位还是32位,否则在进行安装M ...

  6. Pause Web Sessions

    To pause specific sessions, add rules using FiddlerScript to the OnBeforeRequest function (except wh ...

  7. Cocos开发小游戏如何实现微信排行榜

    当游戏开发进入尾声,要引入微信数据的时候,需要了解和微信相关的接口了. 关系数据链 开放数据域 相关接口如下: wx.getFriendCloudStorage() 获取当前用户也玩该小游戏的好友的用 ...

  8. APP注册邀请码

      小火箭:MrZOpba685OMLSpanBKFtkxcQf5eGOY   文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  9. java json与map互相转换(一)

      java json与map互相转换(一) CreationTime--2018年7月16日 Author:Marydon 1.准备工作 所需jar包:json-20180130.jar impor ...

  10. mysql日期相关的函数

    1.获取当前时间: /** 获得当前日期+时间(date + time)函数:now(), 常用 **/ select now() from dual; /** 获取当前时间戳,current_tim ...