【C语言】练习1-22
- 题目来源:《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的更多相关文章
- C语言 编程练习22题
一.题目 1.编一个程序,输入x的值,按下列公式计算并输出y值: 2.已知数A与B,由键盘输入AB的值,交换它们的值,并输出. 3.给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位 ...
- C语言 编程练习22
一.题目 1.编一个程序,输入x的值,按下列公式计算并输出y值: 2.已知数A与B,由键盘输入AB的值,交换它们的值,并输出. 3.给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位 ...
- 深入浅出数据结构C语言版(22)——排序决策树与桶式排序
在(17)中我们对排序算法进行了简单的分析,并得出了两个结论: 1.只进行相邻元素交换的排序算法时间复杂度为O(N2) 2.要想时间复杂度低于O(N2),算法必须进行远距离的元素交换 而今天,我们将对 ...
- C语言基础:枚举.宏 分类: iOS学习 c语言基础 2015-06-10 22:01 20人阅读 评论(0) 收藏
枚举:一组有符号的整型常量,一 一列举所有的状态 枚举常和switch连用 enum week{ monday=1, tuesday, wednesday, thursday, friday, sat ...
- C语言面试题22. 链表中倒数第k个节点
要求:输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...
- 关于数据结构的10个面试题(c语言实现)
关于数据结构的10个面试题(c语言实现) 2010-04-21 22:17 5702人阅读 评论(0) 收藏 举报 数据结构面试c语言bttree 1. 输入一个链表的头结点,从尾到头 ...
- C语言完美体系
**第 1 篇 C 语言第一阶段 13 1.1C 语言第一阶段--语言课程概述 13 1.1.1 什么是语言,什么是 C 语言 13 1.1.2 基本常识 14 1.1.3 人与计算机之间的更好的交互 ...
- C 语言经典100例
C 语言经典100例 C 语言练习实例1 C 语言练习实例2 C 语言练习实例3 C 语言练习实例4 C 语言练习实例5 C 语言练习实例6 C 语言练习实例7 C 语言练习实例8 C 语言练习实例9 ...
- 【转】 解读EOF
解读EOF 标签: fplinuxc语言filestream 2012-01-31 22:05 439人阅读 评论(0) 收藏 举报 分类: C.C++_程序设计(20) 我学习C语言的时候,遇到 ...
- C++的MFC,与C#的.NET
转载:http://blog.sina.com.cn/s/blog_7f5bde5c0101hk5n.html 以下摘自各问答网站.博客论坛: [1]MFC早已过时,现在C++多数是用来编写底层方法而 ...
随机推荐
- 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)
火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /** * ...
- centos6默认python2.6升级2.7 卸载python2.6升级2.7
转自:http://blog.csdn.net/u010098331/article/details/52190354 本文介绍CentOS 6.3从自带的Pyhon版本是2.6升级到2.7.6的方法 ...
- 在CentOS 7上安装Kafka
简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区.多副本.冗余,因此被广泛用于大规模消息数据处理应用. ...
- TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点
ISO/OSI的网络模型架构 TCP/IP参考模型的层次结果 以太网头部结构 以太网属于数据链路层, 属于最基本的协议结构 IP协议 IP协议为TCP, UDP, ICMP提供最基本的数据传输通路 I ...
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...
- linux下jdk_tomcat+mysql配置那点事
(1)上传环境压缩包 apache-tomcat-7.0.47.tar.gz, jdk-7u71-linux-x64.gz, mysql-5.6.14.tar.gz通过xftp工具上传到/usr/lo ...
- innosetup完整脚本
#define MyAppName "Somarto"#define MyAppVersion "1.0.0"#define MyAppPublisher &q ...
- hadoop multipleoutputs
http://grepalex.com/2013/05/20/multipleoutputs-part1/ http://grepalex.com/2013/07/16/multipleoutputs ...
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处 View的绘制流程是从ViewRoot的performTraversals方法開始的.它经过measure.layout和draw三 ...
- 《React-Native系列》44、基于多个TextInput的键盘遮挡处理方案优化
曾经写过两篇关于在ReactNative上处理键盘遮挡输入表单TextInput的情况.建议读者能够先看看 1.<React-Native系列>33. 键盘遮挡问题处理 2.<Rea ...