首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

K&R练习1-8改进

K&R 练习 1-8 改进

基础概念

K&R 练习 1-8 是《The C Programming Language》(K&R)中的一道经典练习题,要求编写一个程序,将输入中的空格和制表符替换为 \t,将连续的空格和制表符替换为一个空格,并删除行尾的空格和制表符。

相关优势

  • 文本处理能力:通过这个练习,可以锻炼对文本数据的处理能力。
  • 逻辑思维:需要设计合理的逻辑来处理不同类型的空白字符。
  • 编程技巧:涉及到字符串处理、条件判断和循环控制等基本编程技巧。

类型

这是一个文本处理类编程练习。

应用场景

  • 文本编辑器:在文本编辑器中,经常需要对输入的文本进行格式化处理。
  • 日志处理:在日志文件中,可能需要清理不必要的空白字符,以便更好地查看和分析日志内容。
  • 数据清洗:在数据处理过程中,可能需要清理输入数据中的多余空白字符。

遇到的问题及解决方法

问题1:如何处理连续的空格和制表符? 原因:连续的空格和制表符需要被替换为一个空格,这需要一个逻辑来检测和处理这种情况。 解决方法

代码语言:txt
复制
#include <stdio.h>

int main() {
    int c, last_char_was_space = 0;
    while ((c = getchar()) != EOF) {
        if (c == ' ' || c == '\t') {
            if (!last_char_was_space) {
                putchar(' ');
                last_char_was_space = 1;
            }
        } else {
            putchar(c);
            last_char_was_space = 0;
        }
    }
    return 0;
}

问题2:如何删除行尾的空格和制表符? 原因:行尾的空格和制表符需要被删除,这需要在读取到行尾时进行特殊处理。 解决方法

代码语言:txt
复制
#include <stdio.h>

int main() {
    int c, last_char_was_space = 0, at_end_of_line = 0;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            at_end_of_line = 0;
        }
        if (c == ' ' || c == '\t') {
            if (!last_char_was_space && !at_end_of_line) {
                putchar(' ');
                last_char_was_space = 1;
            }
        } else {
            putchar(c);
            last_char_was_space = 0;
            at_end_of_line = (c == '\n');
        }
    }
    return 0;
}

参考链接

通过上述代码和解释,可以有效地改进 K&R 练习 1-8,使其能够正确处理连续的空格和制表符,并删除行尾的空格和制表符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言标准

http://www.cnblogs.com/emituofo/archive/2012/07/20/2600481.html,仅供学习 C语言的标准五花八门,多种多样,但总结起来有以下几种: ##K&...书中介绍的C语言标准也被C语言程式设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。...K&R C主要介绍了以下特色: 结构(struct)类型 长整数(long int)类型 无符号整数(unsigned int)类型 把运算符=+和=-改为+=和-=。...即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。 ##ANSI C和ISO C C 的第一个标准是由ANSI发布的。...传统C语言到ANSI/ISO标准C语言的改进包括: 增加了真正的标准库 新的预处理命令与特性 函数原型允许在函数申明中指定参数类型 一些新的关键字,包括 const、volatile 与 signed

49120
  • Python-正则匹配

    速度与激情1' [8]表示只匹配数字8 In [6]: ret = re.match(r"速度与激情[8]","速度与激情8") In [7]: ret.group() Out[7]: '速度与激情8' [1-...8] 表示匹配1-8之间任意一个数字 In [8]: ret = re.match(r"速度与激情[1-8]","速度与激情8") In [9]: ret.group() Out[9]: '速度与激情...*也可以匹配空的,”.+”不可以 三、匹配开头与结尾 练习1:匹配合法变量 In [69]: In [65]: names = ["age","_age","1age","age1","a_age...非法变量名 变量名a#123 非法变量名 变量名______ 符合要求..通过正则匹配出来的数据是______ 练习2:匹配合法邮箱 # coding: utf-8 import re def...保证被测系统的质量与性能,并通过测试流程和方法创新,持续改进提高测试团队的测试覆盖度和测试工作效率。 ...: ...: 岗位要求 ...: 1.

    4.3K30

    不要“做着玩”-《软件方法》自测题解析015

    改进方案一的业务序列图如图1: 图1 改进方案一的业务序列图 从图1可以看出,在业务流程中的很多地方借助了人脑的思考。 竞品系统一的用例图如图2,有3个用例。...图2 竞品系统一的用例图 改进方案二的业务序列图如图3: 图3 改进方案二的业务序列图 从图3可以看出,岗位甲乙丙的责任已被转移到竞品系统二里面。你说啥?...这个时候才会书到有时方恨少,后悔之前没好好练习算牌的技能。 因此,在最后讲到改进指南时,我们都会强调不要“做着玩”。...) 9月12-16晚网课[改为19:30上课*5天]:软件需求设计方法学全程实例剖析 10月10-14晚网课:SysML和MBSE基于模型的系统工程 《软件方法》书中自测题-题目全文+分卷自测(1-

    23020

    算法之美——魔鬼序列

    (2)算法设计 首先按照递归表达式设计一个递归算法,见算法1-8。...能否改进算法? (3)算法验证分析 第一个问题毋庸置疑,因为算法1-8是完全按照递推公式写出来的,所以正确性没有问题。那么算法复杂度呢?...算法1-8的时间复杂度属于爆炸增量函数,这在算法设计时是应当避开的,那么我们能不能改进它呢?...(4)算法改进 既然斐波那契数列中的每一项是前两项之和,如果记录前两项的值,只需要一次加法运算就可以得到当前项,时间复杂度会不会更低一些?我们用数组试试看,见算法1-9。...算法仍然是按照F(n)的定义,所以正确性没有问题,而时间复杂度却从算法1-8的指数阶降到了多项式阶,这是算法效率的一个巨大突破!

    41120

    漫谈C语言及如何学习C语言

    在伟大的著名的无所不包的《K&R》开头部分就提到了,for其实可以通过while来完成,只不过for可以写的更简洁,言外之意,对于C语言for其实不是必要的。...《The C Programming Language》(后面称为 K&R)里面包含了一个简单的语法解析器,包含了malloc如何实现,包含了一个完整的操作系统目录浏览程序,这些程序的实用性极高,可以这样说...学习C语言,一定不能只读书,应该动手练习完成书里面的项目需求(比如编写一个目录浏览器)以及每章的练习题目。这就需要有可以实验的环境,下面针对不同操作系统简单做一下介绍。...而VC++Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。...另外建议大家申请一个github.com的账号,在gist.github.com可以保存自己的练习代码,就不需要随身带着U盘了。

    13.1K31

    C语言入门经典书籍_C语言从入门到精通

    而啊哈磊自己基于gcc做的啊哈C编译器也非常适合初学者练习编程,就像他自己说的,是简洁得不能再简洁的C语言编程软件,没有工程的概念、没有编译链接的步骤、没有环境配置,各种没有,你一打开连代码框架都已经写好了...如已学过一点点 《C程序设计语言》(258页)推荐指数:★★★★★ 昵称K&R(两位作者姓氏首字母),C语言之父的作品,就好比向别人介绍自己的孩子,不能再精辟,不能再权威,被奉为C语言圣经。...在C还没有统一标准的年代,78年K&R的第一版直接被广泛接受为C标准,其他号称是圣经的C语言书用词未免也太想当然了…… 圣 经就好比一件标准模板,国内外数不清的C教程都是参照K&R写的,一如大堆的浏览器都使用了...从头至尾使用的均是书面化的术语,并涉及到逆波兰、二叉树、Unix等专业知识,还时常将C 与Fortran、Pascal语言进行比较,你若不了解这些看着一定头痛,因此K&R并不是入门的最佳选择。...在开讲知识点前先引导读者自己思考,猜猜这些东西是干啥的,甚至 时常让你站在编译器或者语言设计者的角度思考问题,这些做法很独特,让你从一开始就从很本质的层面去接触C;同时督促读者动脑,练习题有趣而简短,提示

    3.1K31

    没有愿景,需求没有依据-《软件方法》自测题解析016

    挑出一些几何课的图,交代课代表在黑板上先画好,整理教学工具、课件U盘 8:10-8:50 上午第一节课(3班几何)等腰梯形,导入课程,内容展开 9:00-9:40 上午第二节课(3班几何)等腰梯形,巩固练习...布置作业,抽空批改之前作业 9:40-10:10 课间休整 10:10-10:50 上午第三节课(4班几何)等腰梯形,导入课程,内容展开 11:00-11:40 上午第四节课(4班几何)等腰梯形,巩固练习...新增产品经理学习专用集锦]25套UML+EA和StarUML的建模示范视频-全程字幕(20220901更新) 10月10-14晚网课:SysML和MBSE基于模型的系统工程 《软件方法》书中自测题-题目全文+分卷自测(1-

    1.2K20

    好文 | 如何系统学习C++?

    学习 C 语言也许一本 K&R 的《C程序设计语言》就够了,但是在 C++ 世界里,找不到这样一本书。...然后就是辅以大量的练习。 就那种 C++ 教程的课后练习题就足够了,类似水仙花数、四则运算计算器之类的东西。...而且不仅包含 C++,其它几乎所有语言都可以在这里进行练习: ? 应该两三周就能过完菜鸟教程这种级别的指引吧。 到这里,你对 C++ 包含了哪些知识点大概有了一个整体的印象。...学习过程中把后面的每一个练习题都自己敲一遍,自己多思考对比一下。 多用代码去验证自己的想法,尤其是指针、引用、构造、析构这些地方。...鹅厂很多代码规范也是基于谷歌的代码规范做了一些适应性的改进。 在学习编程之初就掌握良好的编码规范大有裨益。 三、进阶 上面提到的这些书重点在于如何使用、用好 C++ 这一个范畴。

    2.4K30

    C++ ———前言知识

    ,比如:泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等 C++17 在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold...要求:使用rand 函数, 说了一个 复杂度 nlogn, 问还有没有更好的 想法,进行改进? 【数据结构/算法】 【某学长腾讯面经】 1. 自我介绍 2....如何学习C++ 学习C语言需要多多练习,学习数据结构需要多多思考,那学习C++呢?\ 1 .别人怎么学?...许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。...另外,阅读后必须要练习。除了入门的习题外,还需要做一些工程向的项目,才能了解各种语法、编程范式的使用方法及时机,理想地建议参与一些开源项目。

    9110
    领券