以下是引用神vLinux飘飘在2006-5-7 23:29:00的发言:
我要写是很简单的事情,问题是,我为什么要帮人家做作业?
先不讨论你的程序是否能得到结果
先从你的设计思想去分析
#define N 30
char str[N];
int a[N] = {0}, i, j;
gets(str);
你很明显企图用一个固定大小的字符数组和int数组去装输入的字符串和输出的整形数组
但是,你这样写出的程序从它定义#DEFINE N 30的那句开始就已经死了,被你定死的~
空间浪费是小事,程序溢出才是大事!
也许你会说:什么嘛~不可能会有人有耐心输入超过30个字符去进行测试的.那你就错了~~~
有句话说得好: 如果一件以外它可能会发生,那么它就肯定会发生.
这是句名言,惭愧的是我自己也很难完全按照这句话的意思去处理那些程序中出现的异常.
再从算法角度分析
看这句
for (i = strlen(str) - 1; i >= -1; i--)
要知道strlen(char*)函数的算法复杂度是字符串的长度,一旦调用了这句就表明其实你已经遍历了一遍字符串了.然而你却仍然没得到想要的结果....
最后从编程习惯剖析
总的来说,你已经有一个非常好的编程习惯了,起码有了代码的缩进这个最基本的编程技巧了,别惊讶,我有好多同学仍然喜欢像玩堆高塔一样把代码堆积起来,十分恐怖~
但是一些容易让其他人阅读产生误解的变量,比如你这个程序中的flag变量就不知道用来做什么~应该加一点注释
顺便再说一下,你那程序怎么用的啊?为什么我老是得不到结果?
高手,佩服,就按楼主那么输入的,XP,DEV
a123x456 17960? 302tab5876
[此贴子已经被作者于2006-5-7 23:43:54编辑过]