【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=0;
nbs = 0;
while((c=getchar())!=EOF && c!=‘\n‘){
if(c==‘\t‘){ //制表符替换为空格
nbs = TABLEN-(index+1)%TABLEN;
for(i=0;i<=nbs;i++){
charArr[index]=‘ ‘;
index++;
}
}else{
charArr[index]=c; //保存字符
index++;
}
}
index--;
pos=0;
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-1;
pos = 0;
if(tmp>index){
end = index;
}else{
end = tmp;
}
for(i=end;i>=start;i--){
if(charArr[i]!=‘ ‘){
pos = i;
break;
}
}
if(pos>0){
for(i=start;i<=pos;i++){
putchar(charArr[i]);
}
putchar(‘\n‘);
return pos+1;
}else{ //该n个字符全部为空格的情况
return end+1;
}
}

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

时间: 2024-10-14 20:45:13

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

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

在(17)中我们对排序算法进行了简单的分析,并得出了两个结论: 1.只进行相邻元素交换的排序算法时间复杂度为O(N2) 2.要想时间复杂度低于O(N2),算法必须进行远距离的元素交换 而今天,我们将对排序算法进行进一步的分析,这一次的分析将针对"使用比较进行排序"的排序算法,到目前为止我们所讨论过的所有排序算法都在此范畴内.所谓"使用比较进行排序",就是指这个算法实现排序靠的就是让元素互相比较,比如插入排序的元素与前一个元素比较,若反序则交换位置,再比如快速排序小于

Java基础语言视频

java语言教程-第01讲-Java考古学java语言教程-第02讲-Java创世纪java语言教程-第03讲-Java基本概念java语言教程-第04讲-Java的变量java语言教程-第05讲-Java的基本数据类型java语言教程-第06讲-练习课(一)java语言教程-第07讲-运算符与表达式java语言教程-第08讲-分支语句java语言教程-第09讲-练习课(二)java语言教程-第10讲-循环语句 java语言教程-第11讲-练习课(三)java语言教程-第12讲-面向对象基础(一

MVC--DefaultModelBinder解析request参数

转载:http://www.cnblogs.com/leotsai/p/ASPNET-MVC-DefaultModelBinder.html 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的modelbinder,以为很牛,实际上也落后的很. ASP.NET MVC提供了IModelBinder的默认实现,这个实现的类就叫DefaultModelBinder.我们在写代码的时

第一堂:初识Java

1995年5月23日,有一个伟大的人做了一件伟大的事.他就是James·Gosling,Java之父!是那天,他向SunWorld的听众宣布了Java技术的正式诞生. 从1995年到现在,Java这门语言进过22年的时间不断发展不断更新,版本已经到了1.8.虽然不是很大的数字,但是Java语言在业界却是一个人人皆知的东西.而且从2002年开始,Java语言就占据了世界编程语言排行榜上的No.1,且之后几乎常年占据榜首之位. Java作为一门编程语言,一门非常先进的语言,必然有其出色的地方:作为一

Android开发之json解析

目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上面废话了.现在开发app肯定会涉及到与服务器的交互的,目前的首选是json.用到的解析json的包可以选择gson,fastjson等. 现在分析下把我难倒了好几天的一个bug,就是json的解析. 用到的API:http://fanyi.youdao.com/openapi.do?keyfrom=

Golang基础学习总结

1.不支持继承 重载 ,比如C++Java的接口,接口的修改会影响整个实现改接口的类行为的修改,Go 设计者认为这一特点或许根本没用. 2.必任何函数定义必须花括号跟在函数声明后面而不能换行 如 func  funca(a int){},在Go语言中 函数也是一种类型 可以被推导  使用支持匿名函数 和闭包. 函数的返回值支持多重返回类似Python , 如果不赋值  整数类型默认 0     浮点数类型默认0.0   error类型 默认是nil 3.不用的包一定不要引入,这是Go的原则,就如

自动化运维Python系列(五)之常用模块

模块 用一坨代码实现了某个功能的代码集合 模块分为三种 · 自定义模块 · 第三方模块 · 内置模块 1)自定义模块 自己编写并存在在某个路径下的python程序,实现了某个功能,可以被其他程序调用 2)第三方模块 网络上下载并能兼容当前Python版本的第三方程序模块,比如支持HTTP测试的requests库 3)内置模块 C:\Python3.5\Lib目录下的py文件大部分都是Python的内置模块,如sys.os.time等 导入模块 import module from module.

人月神话--摘点

核心:概念的完整性 1.缺乏合理的时间进度是造成项目滞后的最主要原因,他比其他的所有因素的综总和影响都大 2.关于进度安排,作者的建议:1/3计划.1/6 编码.1/4构件测试以及1/4系统测试 3.小型.精干的队伍是最好的--思绪尽可能的少 4.对于真正意义上的大型系统,小型精干的队伍太慢了 5.概念的完整性是系统设计中最重要的考虑因素 6.为了获得概念的完整性,设计必须由一个人或者具有共识的小型团队来完成 7.对于非常大型的项目,将体系结构方面的工作和具体实现相分离是获得概念完整性的强有力方

你从未知道如此强大的ASP.NET MVC DefaultModelBinder

看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的modelbinder,以为很牛,实际上也落后的很. ASP.NET MVC提供了IModelBinder的默认实现,这个实现的类就叫DefaultModelBinder.我们在写代码的时候,几乎感觉不到这个类的存在,因为这个类自动将request信息解析成action参数.本文将向大家展示这个类是多么强大,可以拯救大量的代码.

ASP.NET MVC DefaultModelBinder

转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的modelbinder,以为很牛,实际上也落后的很. ASP.NET MVC提供了IModelBinder的默认实现,这个实现的类就叫DefaultModelBinder.我们在写代码的时候,几乎感觉不到这个类的存在,因为这个类自动将request信息解析成action参数.本文将向大家展示这个类是