| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1248 人关注过本帖
标题:菜鸟求助一个自定义函数
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用时空之蕊在2004-11-29 02:59:49的发言:

大家好对不起大家了!!这几天要帮别人有事!!所以没有写!!今天看到这么多人关心!所以我就写了了!!有详细的注释!如果不懂联系我!! 程序如下:

/* void printsentense(char *line) *line是一个中文自然段,要求将*line中的汉字按句输出。 若遇到中文标点“。”“?”“!”即换行输出。 */ #include <stdio.h> #include <string.h>

void printsentense(char * line) { char * phead,*pend,*pend1,*pend2,*pend3; //phead为中文自然段的起始地址,pend为结束地址 //phendn为查找结束的标志地址 bool fFind=false;//判断是否找到结束标志 //初始化认为不存在

pend=pend1=pend2=pend3=phead=line;//初始化 while(*phead!='\0')//但没有到末尾时 { pend1=strstr(phead,"。");//查找是否存在。 pend2=strstr(phead,"!");//查找是否存在! pend3=strstr(phead,"?");//查找是否存在? /*********************************************/ //如果要添加其他的判断结束标志请在此判断

/*********************************************/

/************START**START******START*****************************************/ pend=phead+strlen(phead); if(pend1!=NULL) { fFind=true; pend=pend1;//如果存在。则设置pend } if(pend2!=NULL && pend >=pend2) { fFind=true;//注意这里必须使用>=不能用> pend=pend2;//如果存在!并且是在pend的位置或者前面更改pend } if(pend3!=NULL && pend >=pend3) { fFind=true;//注意这里必须使用>=不能用> pend=pend3;//如果存在?并且是在pend的位置或者前面更改pend }

/*********************************************/ //如果要添加其他的判断结束标志请在此判断结束的标志位置

/*********************************************/ //以上为判断并设置pend为正确的结束位置 /***********END*END*END*END***************************************************/

for(char* i=phead;i<pend;i++) printf("%c",*i); if(pend!=phead) printf("\n");

if(fFind==true) pend+=2;//如果是中文结束标号pend应该加2 phead=pend;//初始化下一个自然段首地址 fFind=false;//初始化认为不存在 } }

唉,用得着这样吗?何况strstr()是库函数,如果要用这个函数,更不必如此复杂了。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-29 09:49
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

呵呵!添加了很多的注释是为了看不懂的人啊!!当然要这么复杂了!这个我尽力了!有更加简单的麻烦大家一起讨论!


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-29 15:33
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

大概如此这样就行了,如果有什么没有考虑的地方略微改改就行了

void printsentense(const char *line) { int i,i1; char *ptr=(char *)line;

while(*ptr) { i=*ptr; if(-127<=i&&i<=-1) { i1=*(ptr+1); printf("%c%c",*ptr,*(ptr+1)); if((i==-95&&i1==-93)||(i==-93&&(i1==-65||i1==-95)))printf("\n"); ptr+=2; } else printf("%c",*ptr++); } }

这样只要遍历一次就行了


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-29 20:22
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

呵呵!我没有去查汉字的编码!确实这样应该可以了!

char *ptr=(char *)line好像会有点问题!


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-29 21:28
jpsor
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-11-24
收藏
得分:0 

printsetence(const char *line)

{int i,k;

k=strlen(line); for(i=0;i<=k;i++)

{ if(line[i]!='!'&&line[i]!='?'&&line[i]!='.') printf("%c",line[i]); else {printf("%c",line[i]); printf("\n");} }

}

我把原来的程序改了一下发现也行的通.但用到具体的程序中却一定要把 void 去掉才能运行为何?

2004-12-02 17:46
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

这个应该是不可能的!


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-12-02 18:59
快速回复:菜鸟求助一个自定义函数
数据加载中...
 
   



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

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