| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1147 人关注过本帖
标题:关于一个程序的算法问题!请指教!
只看楼主 加入收藏
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
结帖率:80%
收藏
 问题点数:0 回复次数:12 
关于一个程序的算法问题!请指教!
先谢谢各位能看小弟的帖,本人的问题如下:

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

本人的思路如下:

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

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

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

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

问题结束,谢谢大家!
搜索更多相关主题的帖子: 算法 指教 
2008-06-11 16:33
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
程序写完还用数行数吗?直接拉到最后一行看一下不就行了吗?
2008-06-11 16:43
yyow3193
Rank: 1
来 自:三峡宜昌
等 级:新手上路
帖 子:165
专家分:0
注 册:2008-6-5
收藏
得分:0 
不用数的
2008-06-11 16:51
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
嘿嘿,自己写一个程序完完,大家给看看算法的思路吧!
谢谢了!只给讲算法,编写就不必了!我自己试着来!呵呵!谢谢大家了啊!
2008-06-11 16:54
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
嘿嘿,我小时候写作文也是这样的,写一行数一下字数。

其实算行数时空行也算,不用特别考虑,遇到字符'\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;
        }
}

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-06-11 17:11
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分: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;
        }
}

还请帮忙看下了!谢谢啊!
2008-06-13 14:30
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
大家帮忙看看啊!我SL问的问题!
2008-06-15 12:07
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
好像写错了,或改为与
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;
        }
}

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-06-15 12:18
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
还有,就是在“chengxu(程序名) a.txt(目录下的txt文件))”C语言应该怎么实现?
在命令行下实现的!
2008-06-15 12:58
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
把完整的程序给你:
这一个最简单:
#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]]

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-06-15 13:52
快速回复:关于一个程序的算法问题!请指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018210 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved