编程c语言-<The c programming language>Exercise-23答案求解释。

问题描述

<The c programming language>Exercise-23答案求解释。

本人新手,下面是rick的答案,不明白的是 if( line[t] == ' " ')
in_quote = 1;
if( ! in_quote )
{ }
else
{}
作者是怎样确保下面的if在双引号' “ '内还是在双引号外的,求大神帮助。原代码在下面。
#include

#define MAXLINE 1000 /* max input line size /
char line[MAXLINE]; /*current input line
/

int getline(void); /* taken from the KnR book. */

int
main()
{
int in_comment,len;
int in_quote;
int t;

in_comment = in_quote = t = 0;
while ((len = getline()) > 0 )
{
t=0;
while(t < len)
{
if( line[t] == '"')
in_quote = 1;

  if( ! in_quote )
  {
        if( line[t] == '/' && line[t+1] == '*')
            {
                t=t+2;
                in_comment = 1;
            }
        if( line[t] == '*' && line[t+1] == '/')
            {
                t=t+2;
                in_comment = 0;
            }
        if(in_comment == 1)
         {
                t++;
            }
        else
            {
                printf ("%c", line[t]);
                t++;
            }
  }
  else
  {
          printf ("%c", line[t]);
          t++;
  }
    }
}

return 0;
}

/* getline: specialized version */
int getline(void)
{
int c, i;
extern char line[];

for ( i=0;i<MAXLINE-1 && ( c=getchar()) != EOF && c != 'n'; ++i)
line[i] = c;
if(c == 'n')
{
line[i] = c;
++i;
}
line[i] = '';
return i;

}

解决方案

意思是判断是否为字符为双引号

解决方案二:

代码太乱,整理了一下


 #include
#define MAXLINE 1000 /* max input line size /
char line[MAXLINE]; /*current input line/
int getline(void); /* taken from the KnR book. */
int
main()
{
    int in_comment,len;
    int in_quote;
    int t;
    in_comment = in_quote = t = 0;
    while ((len = getline()) > 0 )
    {
        t=0;
        while(t < len)
        {
            if( line[t] == '"')
                in_quote = 1;
            if( ! in_quote )
            {
                if( line[t] == '/' && line[t+1] == '*')
                {
                    t=t+2;
                    in_comment = 1;
                }

                if( line[t] == '*' && line[t+1] == '/')
                {
                    t=t+2;
                    in_comment = 0;
                }

                if(in_comment == 1)
                {
                    t++;
                }
                else
                {
                    printf ("%c", line[t]);
                    t++;
                }
            }
            else
            {
                printf ("%c", line[t]);
                t++;
            }
        }
    }
    return 0;
}

/* getline: specialized version */
int getline(void)
{
    int c, i;
    extern char line[];
    for ( i=0;i<MAXLINE-1 && ( c=getchar()) != EOF && c != 'n'; ++i)
        line[i] = c;
    if(c == 'n')
    {
        line[i] = c;
        ++i;
    }
    line[i] = '';
    return i;
}

解决方案三:

if( line[t] == '"') 这一句是判断line[t]为双引号时的处理,没看出有什么高深的算法

解决方案四:

它的意思是不是 只要遇到一个双引号之后都会执行else的内容,不管以后再次遇到的双引号了。

时间: 2024-08-31 03:25:31

编程c语言-&amp;lt;The c programming language&amp;gt;Exercise-23答案求解释。的相关文章

Haskell函数式编程之一-语言初体验

如果你是使用面向对像语言进行编程的程序员,那么你应该去了解掌握一门动态语言.而动态语言的魔力之一就是函数式编程.而要学习了解函数式编程,那么haskell是一个不错的选择. Haskell是是一门纯函数式编程语言(purely functional programming language).在其世界中函数是第一等对象.并且在haskell中没有赋值,例如你指派a的值为5,然后你无法再给a分配其它的值.所以你不能像命令式语言那样命令电脑"要做什么",而是通过函数来描述出问题"

工作-编程开发语言未来趋势。

问题描述 编程开发语言未来趋势. 2015了,现在PHP逐步进入的主流.那么在未来的几点哪一种编程开发语言为成为主流?工作比较好找? 解决方案 编程语言的趋势就是,编程语言的碎片化,所谓碎片化就是不再有一家独大的情况了,以前C++占有80%的份额,后来大家都用Java.而现在,虽然还有传统意义上的大众语言,但是渐渐式微. 相反,一大批小众语言开始涌现,并且各领风骚.其实这很好理解,因为传统的PC编程时代过去了,现在的软件渗透到了几乎所有的领域,所有的设备,所有的场合. 需求的多样性必然使得编程语

iOS Socket编程-C语言版(UDP)

iOS Socket编程-C语言版(UDP) 本篇文章为总结使用C语言的api来完成UDP通信的基本功能,如果您对Socket不了解,请先阅读上一篇理论知识: iOS Socket理论知识 如果文章中有任何您认为不正确的或者有疑问的,请联系笔者! 谢谢! 支持原创,请阅读原文 1. UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了.首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的. 注意:Socket通信一定有要

iOS Socket编程-C语言版(TCP)

iOS Socket编程-C语言版(TCP) 本篇文章为总结使用C语言的api来完成TCP通信的基本功能,如果您对Socket不了解,请先阅读上一篇理论知识: iOS Socket理论知识 如果您还想学习UDP编程,请阅读iOS Socket编程-C语言版(UDP) 如果文章中有任何您认为不正确的或者有疑问的,请联系笔者! 谢谢! 支持原创,请阅读原文 1. TCP Socket编程 TCP是面向连接的,安全可靠的传输层协议.TCP的程序基本框架设计图: 注意:Socket通信一定有要服务端和客

c语言编程-C语言关于使用结构体数组的问题

问题描述 C语言关于使用结构体数组的问题 #include struct Student { int mun; long char name[5]; int score[3]; struct Student *next; }; int main() { struct Student a,b,c,*head,*p; a.mun=10101;a.name="张丹";a.score[0]=89;a.score[1]=95;a.score[2]=91; b.mun=10103;a.name=&

《The C Programming Language》读书笔记总结 &amp;lt;一&amp;gt;.基础篇

写了这么多年的C代码,回过头来再看<The C Programming Language>这本书,作者Brian W. Kernighan和C语言之父Dennis M. Ritchie.感觉里面的知识和书的架构给人非常"合理"的感觉.怎么个合理法呢? 首先书中的代码,如else-if中使用binsearch函数介绍二分查找.atoi介绍字符串s转换为整数.计算器逆波兰表达式,都是实际中非常经典且常用的知识: 然后书中大部分的程序都是基于stdlib.h.string.h.c

Objeck Programming Language 2.1.3发布 面向对象语言

Objeck Programming Language是一个具有与Java.C#和Pascal关系功能特性的面向对象的计算机语言.在该语言中,所有http://www.aliyun.com/zixun/aggregation/18278.html">数据类型都被视为对象.语言由一个编译器和一个附带内存管理和JIT编译器的虚拟机组成. Objeck Programming Language 2.1.3该版本主要集中在错误修正和性能提升.增强了类库.包括界面的全面支持,为String类中复制的

代码分析-The Programming Language中的 代码问题

问题描述 The Programming Language中的 代码问题 在The Programming Language导言的1.5.4小节,有意额单词计数程序,为什么我敲出来之后输入字符串 然后再敲回车 没反应呢?代码跟书上的一样啊.代码如下,求助!!! #include #define IN 1 #define OUT 0 main() { int c,nl,nw,nc,state; state=OUT; nl=nw=nc=0; while((c=getchar())!=EOF) { +

Qore Programming Language 0.8.4发布 嵌入式多线程编程语言

Qore Programming Language 是一款http://www.aliyun.com/zixun/aggregation/17547.html">功能强大.嵌入式多线程逻辑和面向对象的编程语言,其设计是应用于以灵活的脚本为基础的企业界面开发.它也可作为一种通用语言. Qore Programming Language 0.8.4该版本进行了重要的更新,增加了用户模块,模块在运行时扩展语言,现在可以书面Qore本身的支持.Qore现在支持绑定到值类型,它提供了可运行在任何Qo