注:这些练习都来源于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下编译通过。
程序天天练(1)
最新推荐文章于 2024-07-12 17:43:25 发布