zhaoyg 发布留言 2008-7-5 17:23
模仿VxWorks和飞燕版主,我也做了一个代码高亮的小程序
模仿VxWorks和飞燕版主,我也做了一个代码高亮的小程序
。
这是源程序:
#include
#include
int main()
{
int a=0,n=0,c=0;
char ch;
printf("请输入字符串\n");
while ((ch=getchar())!='\n')
{
//printf("请输入字符\n");
if (ch=='i')
a=1;
if (ch!='e'&&ch!='i'&&a==1||ch=='*')
c++;
if (ch=='e'&&a==1) //当a为1时表示在e之前有i
{
if (c==1) //当c等于1时表示i与e之间只有一个其他字符
{
n++;
a=0;
}
c=0; //如果此处不重新赋值为0,则下次c会在1的基础上继续递增
}
}
printf("刚才的字符中有%d次",n);
getch();
return 0;
}
转换后:以下内容为程序代码:
#include #include int main() { int a=0,n=0,c=0; char ch; printf("请输入字符串\n");
while ((ch=getchar())!='\n') { //printf("请输入字符\n"); if (ch=='i') a=1; if (ch!='e'&&ch!='i'&&a==1||ch=='*') c++; if (ch=='e'&&a==1) //当a为1时表示在e之前有i { if (c==1) //当c等于1时表示i与e之间只有一个其他字符 { n++; a=0; } c=0; //如果此处不重新赋值为0,则下次c会在1的基础上继续递增 } } printf("刚才的字符中有%d次",n); getch(); return 0; }
|
效果:
#include
#include
int main()
{
int a=0,n=0,c=0;
char ch;
printf("请输入字符串\n");
while ((ch=getchar())!='\n')
{
//printf("请输入字符\n");
if (ch=='i')
a=1;
if (ch!='e'&&ch!='i'&&a==1||ch=='*')
c++;
if (ch=='e'&&a==1) //当a为1时表示在e之前有i
{
if (c==1) //当c等于1时表示i与e之间只有一个其他字符
{
n++;
a=0;
}
c=0; //如果此处不重新赋值为0,则下次c会在1的基础上继续递增
}
}
printf("刚才的字符中有%d次",n);
getch();
return 0;
}[/indent]中学者 发布留言 2008-7-5 17:30
支持一下....有点不彻底...多加点颜色 [em12]yzd450471032 发布留言 2008-7-5 17:30
我想学
这个编程是干什么用的?我一点也看不懂~~[tk07]zhaoyg 发布留言 2008-7-5 17:33
[un]中学者[/un] 在 2008-7-5 17:30 的发言:[/bo]
支持一下....有点不彻底...多加点颜色 [em12] [/quote]
颜色太多,虽然挺花哨,但适得其反。 个人觉得Visual C++的颜色种类就可以了。
“...有点不彻底...” 指的那一块呀?
[ 本帖最后由 zhaoyg 于 2008-7-5 17:45 编辑 [/it]]VxWorks 发布留言 2008-7-5 17:44 这东西想做好需要有个好的设计,设计好了编码很简单。 需要的知识储备是正则表达式,最好还掌握编译原理中的词法分析
我的fish已经开源了,你可以去看看我是怎么做的 http://bbs.bccn.net/thread-216338-1-1.html
我用了5天时间完成,一天时间查阅ANSI C资料,做总体设计,一天时间编码,三天时间测试,除虫,写文档。
第一步最重要,从C99标准中构造C词法的正则表达式,有了正则表达式就好做后面的工作了。飞燕因为这一步没有做好,有些BUG到现在还没有解决。 第二步,根据正则表达式构造DFA,如果学过编译原理中的词法分析这不是难事,没有学就利用现有的解析正则的库函数也可以,不过最简单的是使用lexVxWorks 发布留言 2008-7-5 17:47 来秀一把fish的着色效果,着色方案模仿vim
#include #include int main() { int a=0,n=0,c=0; char ch; printf("请输入字符串\n");
while ((ch=getchar())!='\n') { //printf("请输入字符\n"); if (ch=='i') a=1; if (ch!='e'&&ch!='i'&&a==1||ch=='*') c++; if (ch=='e'&&a==1) //当a为1时表示在e之前有i { if (c==1) //当c等于1时表示i与e之间只有一个其他字符 { n++; a=0; } c=0; //如果此处不重新赋值为0,则下次c会在1的基础上继续递增 } } printf("刚才的字符中有%d次",n); getch(); return 0; } [/quote]zhaoyg 发布留言 2008-7-5 17:49 我早已下了你的源码,但遗憾的是,压根看不懂
正则表达式怎么构造呀?VxWorks 发布留言 2008-7-5 17:55 看不懂?不会吧,还有人给我发邮件说代码写的很清晰呢[em10] 我觉得fish很简陋,所以注释很少
我的关键代码是main.c,get_conf.c,fish.lex 看看makefile就知道他们的关系
你学过正则表达式就知道该怎么构造了zhaoyg 发布留言 2008-7-5 17:59 也许是我真太菜了[em04] 。 我下的好几个他人的源码,都没有一个看懂过。
“正则”我只听说过,也知道他他该是干什么的,仅次而已。zhaoyg 发布留言 2008-7-5 17:59 makefile 我也只在linux上安装软件是见到过VxWorks 发布留言 2008-7-5 18:01 好好努力吧,等着你来开发fish的下一个版本
相关资料: http://www.ibm.com/developerworks/cn/linux/sdk/lex/zhaoyg 发布留言 2008-7-5 18:06 [quote][un]VxWorks[/un] 在 2008-7-5 18:01 的发言:[/bo]
好好努力吧,等着你来开发fish的下一个版本.....
|
希望你还在人世。 希望上帝不会唱“...你知不知道,我等你花儿都卸了...”zhaoyg 发布留言 2008-7-5 18:06 谢谢你的网址flyue 发布留言 2008-7-5 19:26 VxWorks的代码着色器支持C++不? 还有,本人也认为颜色不要太多,就VC那几种颜色就够了。象飞燕那个,颜色太花俏,我都懒得用。 上个月我也做了个代码着色器,支持C++代码。 做这个用了2天 [quote]#include #include int main() { int a=0,n=0,c=0; char ch; printf("请输入字符串\n");
while ((ch=getchar())!='\n') { //printf("请输入字符\n"); if (ch=='i') a=1; if (ch!='e'&&ch!='i'&&a==1||ch=='*') c++; if (ch=='e'&&a==1) //当a为1时表示在e之前有i { if (c==1) //当c等于1时表示i与e之间只有一个其他字符 { n++; a=0; } c=0; //如果此处不重新赋值为0,则下次c会在1的基础上继续递增 } } printf("刚才的字符中有%d次",n); getch(); return 0; } |
VxWorks 发布留言 2008-7-5 19:44
因为偶不会C++所以不打算做C++的
我这里有个好的着色测试,看148楼
http://bbs.bccn.net/thread-212075-15-1.htmlsunkaidong 发布留言 2008-7-5 19:45
四色定理认为只要四种颜色就可以把地图区分开。。。呵呵,写漂亮点很好玩。。flyue 发布留言 2008-7-5 20:00
漂亮的都开花了qGemini 发布留言 2008-7-5 23:13
[tk05]
页: [1]