程序天天练(1)

注:这些练习都来源于C经典教程《The C Programming Language,2nd》。做这些练习目的是培养一种编程思想(效率,重用...),而不是简单的实现功能。

Ex:
  Exercise 1-12 Write a program that prints its input one word per line.
Date: 2005.1.6

Solution 1:
  1.判断每一个输入的字符,若输入的字符是' '或'/t',将此字符转化成'/n';
  2.合并连续的'/n'为一个'/n';
  3.输出。
分析:这种方法思路比较清晰,存在的问题就是需要一个容器来装输入的字符,容器的大小在Run-time才能确定。解决的办法可以用STL中的容器,这些容器的大小都是可以动态改变的。

Solution 2:
  1.定义一个标识符,用来表示是否连续出现了' '或'/t'。
  2.定义一个char变量,表示前一个输出的字符。
  2.if( 输入的字符不是' '和'/t' )
        输出此字符;
        标识符=0;
    else if( 标识符==0 && 前一个字符!='/n' )
        输出字符'/n';
        标识符=1;
    else
        do nothing;
分析:这种方法逻辑比较复杂,但是没有使用其他的容器,效率比第一种要高。

         
下面是思路2的代码:
int main(int argc, char *argv[])
{    
  int count_char=0;
  int flag=0;
  int c;
  int c_before;
  for( count_char=0; (c=getchar())!=EOF; count_char++ )
  {
    if( c!=' ' && c!='/t' )
    {
        putchar(c);
        c_before=c;
        flag=0;
    }
    else if( (!flag) && (c_before!='/n') )
    {
        flag=1;
        putchar( '/n' );
        c_before='/n';
    }
    else
    {
        //do nothing.
    }
  }                      
  return 0;
}

此代码在Windows2000,Dev-C++ 5.0b下编译通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值