【C语言】练习1-21

  •  题目来源:《The C programming language》中的习题

  •  练习1-21:编写程序entab,将空格串替换为最好数量的制表符和空格,但要保持单词之间的间隔不变。

  思路: 

  对于制表符的作用我们已经在习题1-20中讲解了。

  这里的题目是用最少的制表符和空格代替空格。这里也分为以下几种情况:

  1. 字符为空格时,判断当前空格的位置,如果当前位置对8取余不为零,则nb++;如果当前位置对8取余等于零,ntab++,pos++,并且要把nb变为0;

  2. 字符为换行时,把变量清空,即nb=0,ntab=0,pos=0

  3. 字符为普通字符时,首先根据ntab的值for循环输出\t;同样根据nb的值循环输出空格。然后判断当前字符若为\t,则位置pos=pos+(ENTAB-pos%ENTAB)%ENTAB+1;否则令pos++。之后令nb为零。并输出当前字符。

  C语言代码实现:


#include<stdio.h>

#define ENTAB 8

void main(){
int c,nb,ntab,i,j,pos;
nb = 0;
ntab = 0;
i = 0;
j = 0;
pos = 1;
while((c=getchar()) != EOF){
if(c == ‘ ‘){
if(pos%ENTAB != 0){
nb++;
}else{
ntab++;
nb = 0;
}
pos++;
}else if(c == ‘\n‘){
nb = 0;
ntab = 0;
i=0;
j=0;
pos = 1;
putchar(c);
}else{
for(;i<ntab;i++){
putchar(‘\t‘);
}
for(;j<nb;j++){
putchar(‘ ‘);
}
if(c == ‘\t‘){
pos += (ENTAB-pos%ENTAB)%ENTAB+1;
}else{
pos++;
}
putchar(c);
nb = 0;
ntab = 0;
i = 0;
j = 0;

}
}
}

【C语言】练习1-21,布布扣,bubuko.com

时间: 2024-07-31 07:23:21

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

【C语言】练习2-1

 题目来源:<The C programming language>中的习题P27  练习2-1: 编写一个程序以确定分别由signed及unsigned限定的char.short.int与long类型变量的取值范围.采用打印标准头文件中的相应值以及直接计算两种方式实现.后一种方法的实现较困难一些,因为要确定各种浮点类型的取值范围. 采用打印标准头文件中的相应值: #include <stdio.h> #include <limits.h> int main() { p

深入浅出数据结构C语言版(21)——合并排序

在讲解合并排序之前,我们先来想一想这样一个问题如何解决: 有两个数组A和B,它们都已各自按照从小到大的顺序排好了数据,现在我们要把它们合并为一个数组C,且要求C也是按从小到大的顺序排好,请问该怎么做? 这个问题非常容易解决,我们将A.B和C都视为队列,然后不断比较A和B的首部,取出其中更小的数据出队 http://pic.cnhubei.com/space.php?uid=4593&do=album&id=1092952http://pic.cnhubei.com/space.php?ui

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讲-面向对象基础(一

javaweb学习总结(三十一)——国际化(i18n)

一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization)又称为 i18n(读法为i 18 n,据说是因为internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来) 二.合格的国际化软件 软件实现国际化,需具备以下两个特征: 1.对于程序中固定使用的文本元素,例如菜单栏.导航条等中使用的文本

常见的JavaScript代码(四)

文章来自"PHP100中文网" 18.改变按钮的图片. <style type="text/css"> <!-- .style3 { font-size: 12px; background: url(image/buttonbg1.gif); border: 0px; width: 60px; height: 22px} .style4 { font-size: 12px; font-weight: bold; background: url(im

C++ 备忘录 (1)

取模: 1. 转载自:http://ceeji.net/blog/mod-in-real/ 1 背景 2 3 最近在一道 Java 习题中,看到这样的一道题: 4 5 What is the output when this statement executed: 6 System.out.printf(-7 % 3); 7 8 正整数的取余运算大家都很熟悉,但是对于负数.实数的取余运算,确实给人很新鲜的感觉.于是我对此进行了一些探索.我发现,这里面还是颇有一点可以探索的东西的. 9 10 探究

JSP + Servlet 图书管理系统

所用技术: JS+Servlet.bootstrap前端框架.JQuery Validate 验证框架.MySQL数据库: DAO 设计模式: 基于Servlet + JSP + JavaBean 的MVC设计模式. 小技术点:MD5加密操作,分页小脚本. 功能: 1.后台登录 超级管理员登录能看到超级管理员菜单(全局flag) 普通管理员登录 2.用户管理 用户录入 3.图书类别管理 添加分类 类别列表 4.图书管理 增加图书 图书列表 5.借书登记 借书信息录入 借书信息列表 数据库设计:

在 Azure HDInsight 中安装和使用 Spark

Spark本身用Scala语言编写,运行于Java虚拟机(JVM).只要在安装了Java 6以上版本的便携式计算机或者集群上都可以运行spark.如果您想使用Python API需要安装Python解释器(2.6或者更高版本),请注意Spark暂不支持Python 3. 下载Spark 首先下载Spark并解压,我们从下载预编译版本的Spark开始.在浏览器中访问 http://spark.apache.org/down loads.html 选择"Pre-built for Hadoop 2.

200多个js技巧代码

1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 <input type="text" value="mm" onfocus="if(value=='mm) {value=''}" onblur="if (value=='') {value='mm'}">点击时文字消失

javascript 技巧总结积累(正在积累中)

1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 <input type="text" value="郭强" onfocus="if(value=='郭强') {value=''}" onblur="if (value=='') {value='郭强'}">点击时文字消