当前位置: 代码迷 >> C语言 >> 关于一个程序的算法问题!请指教!
  详细解决方案

关于一个程序的算法问题!请指教!

热度:362   发布时间:2008-06-11 16:33:44.0
关于一个程序的算法问题!请指教!
先谢谢各位能看小弟的帖,本人的问题如下:

    最近本人在写程序的途中,写完以后就会去数代码的行数……(由于别人都在看某某程序有多少行……而养成了这个习惯……)每次写完都要去数……哎……觉得麻烦,就想自己写个自动读出行数的C语言小程序!

本人的思路如下:

(由于本人才开始学编程不久,希望有什么错的地方大家指正,谢谢)

  程序开始,使用命令(比如在CMD模式下 chengxu(程序名) a.txt(目录下的txt文件))这样去读入一个文件,然后程序开始运行,检测每一行无否字符,如果有的话n++,如果没有,就不++,最后输出n……

这是程序大概的思路,不知道可否,大家给看看吧!谢谢了!如果有什么不足,请给予改正下……

还有,就是在“chengxu(程序名) a.txt(目录下的txt文件))”C语言应该怎么实现?

问题结束,谢谢大家!
搜索更多相关的解决方案: 算法  指教  

----------------解决方案--------------------------------------------------------
程序写完还用数行数吗?直接拉到最后一行看一下不就行了吗?
----------------解决方案--------------------------------------------------------
不用数的
----------------解决方案--------------------------------------------------------
嘿嘿,自己写一个程序完完,大家给看看算法的思路吧!
谢谢了!只给讲算法,编写就不必了!我自己试着来!呵呵!谢谢大家了啊!
----------------解决方案--------------------------------------------------------
嘿嘿,我小时候写作文也是这样的,写一行数一下字数。

其实算行数时空行也算,不用特别考虑,遇到字符'\n'行数就加一

非要去除空行就这样,写一个小的状态机:
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
        if(ch != ' ' || ch != '\n' || ch != '\t')        //非空字符
                state = 1;
               
        if(ch == '\n' && state)
        {
                ++count;
                state = 0;
        }
}

----------------解决方案--------------------------------------------------------
int ch,state,count=0;
while((ch=getchar()) != EOF)        //请问EOF是什么意思?还有getchar()啥意思啊?输入以个字符?还时?怎么理解?
{
        if(ch != ' ' || ch != '\n' || ch != '\t')        //非空字符
                state = 1;                   //当字符不等于空字符,或不等于回车,或不等于\t时state加等于1   这里state起到什么作用?
               
        if(ch == '\n' && state)     //ch等于换行,并且state为真时……
        {
                ++count;           //ccount起啥用啊?
                state = 0;
        }
}

还请帮忙看下了!谢谢啊!
----------------解决方案--------------------------------------------------------
大家帮忙看看啊!我SL问的问题!
----------------解决方案--------------------------------------------------------
好像写错了,或改为与
state是记录状态的,EOF表示文件结束
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
        if(ch != ' ' && ch != '\n' && ch != '\t')        //非空字符
                state = 1;
               
        if(ch == '\n' && state)
        {
                ++count;                                                //记录一个非空行
                state = 0;
        }
}

----------------解决方案--------------------------------------------------------
还有,就是在“chengxu(程序名) a.txt(目录下的txt文件))”C语言应该怎么实现?
在命令行下实现的!
----------------解决方案--------------------------------------------------------
把完整的程序给你:
这一个最简单:
#include <stdio.h>

int main(void)
{
        int ch,state,count=0;
        
        while((ch=getchar()) != EOF)
        {
                if(ch != ' ' && ch != '\n' && ch != '\t')        //非空字符
                        state = 1;
               
               if(ch == '\n' && state)
                {
                        ++count;                        //记录一个非空行
                        state = 0;
                }
        }        
        
        fprintf(stdout,"no-space lines :\t%d",count);
               
        return 0;                                
}


这一个更高效:
#include <stdio.h>
#define MAX_LINE        80

int main(void)
{
        int i,state,count=0;
        static char buf[MAX_LINE];
        
        while(fgets(buf,MAX_LINE,stdin) != NULL)
        {
                for(i=0;buf[i] != '\0';++i)
                {
                        if(buf[i] != ' ' && buf[i] != '\n' && buf[i] != '\t')        //非空字符
                      state = 1;
                }
               
                if(buf[i-1] == '\n' && state)
                {
                        ++count;                                     //记录一个非空行
                        state = 0;
                }
        }        
        
        if(feof(stdin))
        {
                fprintf(stdout,"no-space lines :\t%d",count);
                return 0;
        }
        
        if(ferror(stdin))
        {
                fprintf(stderr,"read file error!\n");
                return 1;
        }                                                
}


文件保存为lc.c,通过重定向符号<输入要统计的文件,编译生成lc后,可以统计lc.c文件:
lc < lc.c
no-space lines :        30

[[it] 本帖最后由 VxWorks 于 2008-6-15 14:00 编辑 [/it]]
----------------解决方案--------------------------------------------------------
  相关解决方案