标题:[编程竞赛]****第一题****
只看楼主
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
结帖率:92.86%
 问题点数:0 回复次数:9 
[编程竞赛]****第一题****

编写一个函数

原形: char * fun(char *string)

前题:一个任意长字符串(不含中文) 功能:

(1).删除该字符串的前导空格,后空格.并删除句子中多余的空格(单词之间只留一个);

(2)替换非英文字母(指非a~z,A~Z,及标点)为空格,但必须满足条件一。

测试例子:

char *string=" Dan Ochoa, @#$ principal of St. Anthony Catholic High School, set to replace retiring ++=Dean Sr. Sally _+ Mitchell. "

结果:

Dan Ochoa, principal of St. Anthony Catholic High School, set to replace retiring Dean Sr. Sally Mitchell.

[此贴子已经被作者于2004-06-08 11:10:30编辑过]

搜索更多相关主题的帖子: 竞赛 
2004-06-08 11:07
jianenghui
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2004-6-6
得分:0 
你的题目太难了,我写不出,有简单点的没有?
2004-06-08 16:40
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
得分:0 

不错,建议你先出几道简单的题目,然后慢慢加大难度

这样可以给新手锻炼的机会,也可以培养他们的兴趣


我的主页 http://www.
2004-06-09 09:52
jeremydomett
Rank: 2
等 级:新手上路
威 望:3
帖 子:312
专家分:0
注 册:2004-6-10
得分:0 

这和计算机3级的上机题一样.


热爱编程........永不放弃.........
2004-06-10 11:28
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 

#include<stdio.h>

main()

{char a[100],*p;

gets(a); printf("\n\n");

p=fun(a); puts(p); printf("\n\n");

}

char *fun(char *s)

{char b[100],*p=b;

int i,j=0;

for(i=0;*(s+i)!='\0';i++)

{if(i==0&&*(s+i)=='') {i++;while(*(s+i)=='') i++;}

else if(*(s+i)=='') while(*(s+i+1)=='') i++;

else if((*(s+i)<'A'||*(s+i)>'Z'&&*(s+i)<'a'||*(s+i)>'z')&&*(s+i)!=',') *(s+i)='';

else if(*(s+i)==''&&还没想到) /*后空格不会去啊,还没想到,真晕*/

*(p+j++)=*(s+i);

}

*(p+j)='\0';

return p;

}

不知道对不对,没运行?望指教!


2004-06-23 16:35
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 

#include<stdio.h>

#include<string.h>

main()

{char a[100],*p;

gets(a); printf("\n\n");

p=fun(a); puts(p); printf("\n\n");

}

char *fun(char *s)

{char b[100],*p=b;

int i,j=0,k,t=0;

for(i=0;*(s+i)!='\0';i++)

{if(i==0&&*(s+i)=='') {i++;while(*(s+i)=='') i++;}

else if(*(s+i)=='') while(*(s+i+1)=='') i++;

else if((*(s+i)<'A'||*(s+i)>'Z'&&*(s+i)<'a'||*(s+i)>'z')&&*(s+i)!=',') *(s+i)='';

if(*(s+i)=='') for(k=i+1;k<strlen(s);k++) if(*(s+k)!='') break;

if(k>=strlen(s)) {*(s+i)='\0';t=1;}

*(p+j++)=*(s+i);  if(*(s+i)=='\0') break;

}

if(t==0) *(p+j)='\0';

return p;

}

这样好像可以,不知道对不对,望指教!

还有就是是不是该出点新题了啊?

[此贴子已经被作者于2004-06-24 16:38:20编辑过]


2004-06-24 16:15
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 
我晕,运行了一下,得不到结果,不知道哪错了?

2004-06-24 16:28
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

char*fun(char*string); main() { char*string=" Dan Ochoa, @#$ principal of St. Anthony Catholic High School, set to replace retiring ++=Dean Sr. Sally _+ Mitchell. " ; printf("%s",fun(string));

}

char*fun(char*string) { char*ptr,*newptr ; int flag=-1 ; ptr=string ; newptr=string ; while(*ptr) { if((*ptr>='a'&&*ptr<='z')||(*ptr>='A'&&*ptr<='Z'))*newptr++=*ptr++,flag=1 ; else if(*ptr==' '&&flag==1)*newptr++=*ptr++,flag=-1 ; else switch(*ptr) { case '\'' : case '"' : case ',' : case '.' : case '!' : case '(' : case ')' : case ':' : case ';' : case '?' : case '[' : case ']' :*newptr++=*ptr++;break ; default :ptr++; } }

*newptr='\0' ;

return string ; }

其实这个题也不是很难,临时写一个,稍稍调试了一下,不知道还有没有未考虑问题。

且作抛砖引玉之用吧。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-24 22:42
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

TO:空前

你写的程序很不规范,一个书写不规范的程序别人是不喜欢看的。(当然,混乱代码除外)


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-24 22:45
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 

楼上的大哥,我刚学C,不知道哪里写得不规范,望指出!

可能是我想的方法太笨,程序代源太多,让人看起来眼花吧。


2004-06-25 16:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-2152-1-1.html




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

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