| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 982 人关注过本帖
标题:哪里出问题了?
只看楼主 加入收藏
freeday_zhao
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-12-11
收藏
 问题点数:0 回复次数:17 
哪里出问题了?

#include<stdio.h> int any(char s1[],char s2[]); void main() { int i; char s1[100],s2[100]={'o'}; for(i=0;i<=99;++i)scanf("%s",s1[i]); any(s1,s2);

} /*any: return first iocation in s1 where any char from s2 occurs*/ int any(char s1[],char s2[]) { int i,j; for(i=0;s1[i]!='\0';i++) for(j=0;s2[j]!='\0';j++) if(s1[i]=s2[j])/*match found?*/ return i;/*location first match*/ return 0; }

搜索更多相关主题的帖子: void include return occurs 
2005-01-12 01:28
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
scanf()函数使用错了!

差点把你忘了...
2005-01-12 08:54
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

哈哈,天使总是比我先 哦,快放假啦~~终于能回来看看我心爱的C语言了。 经过半个学期的研究,终于发现,什么C#啦,JAVA啦全是假的。 在程序界中,永恒不变的主题仍然还是C/C++,大家一定要学好啊~~~~

恩恩,有点扯远了。让我们回来看看这个问题。

这个是楼主的程序,只不过我见格式不爽,自己改了一下。

#include<stdio.h> int any(char s1[],char s2[]);

void main() { int i; char s1[100],s2[100]={'o'}; /*只找一个字符,太浪费原程序的意思了*/

for(i=0;i<=99;++i) scanf("%s",s1[i]); /*这里的输入语句用for太不好了,一定要你输入完100个字符啊!@_@*/

any(s1,s2); /*在这里竟然没有输出语句,那你怎么看结果啊?*/ }

/*any: return first iocation in s1 where any char from s2 occurs*/ int any(char s1[],char s2[]) { int i,j;

for(i=0;s1[i]!='\0';i++) for(j=0;s2[j]!='\0';j++) if(s1[i]=s2[j])/*match found?*//*老牌经典错误,自己找*/ return i;/*location first match*//*这里有待说明*/ return 0; }

我的意见都在代码中的注释部分了,现在来看看修改后的样子。

#include<stdio.h>

int any(char s1[],char s2[]);

void main() { int i; char s1[100]; char s2[]={"gay"};/*这里如果只用一个字符太浪费any函数的意思了,所以我改变了一下^o^*/

gets(s1);/*把for语句换成gets不是很好么~*/ printf("%d",any(s1,s2));/*输出结果*/ getch();

}

/*any: return first iocation in s1 where any char from s2 occurs*/ int any(char s1[],char s2[]) { int i,j; for(i=0;s1[i]!='\0';i++) for(j=0;s2[j]!='\0';j++) if( s1[i]==s2[j] )/*match found?*//*老牌错误*/ return i+1;/*location first match*//*为什么是i+1?见说明*/ return 0; }

为什么是i+1?老大,因为C语言中的数组是从0开始计算的,而我们日常都习惯从1开始,所以结果要+1啦。

好,我们来运行一下看看。 运行程序,输入 KNOCKER is gay! 结果: 12

gay这个单词正好在这个句子中第12个字符的位置,完成 -,-


淘宝杜琨
2005-01-12 09:00
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
神vLinux飘飘 我要说你的说明上的一个错误和说明漏洞, 一, “gay这个单词正好在这个句子中第12个字符的位置,完成 -,-”,这句就错了(我想你的意思也不是这个,不过 有误导作用),不是“同性恋”这个单词在句子的12位,而是它中的一个字符('g','a','y')最先出现在12位! 二, return i+1;是对的,不过说明你漏了一个,当('g','a','y')最早出现在0位时,用return i;也是零,那怎么知道是 是不是已经找到字符了那!所以return i;不对!

差点把你忘了...
2005-01-12 09:25
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
汗~~你,你~~不要这样啦,本来想欺负KNOCKER不通E文的~~~不要告诉他gay的意思啦

一, 同意你的观点,的确我的意思和你说的一样~~谢谢你的更正.

二,很不同意你的观点 :)
注意一下啦,any函数还有一个return 0; 呀~

淘宝杜琨
2005-01-12 09:34
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
对呀,就是因为有return 0;才说明错了,找不到也是return 0;找到如果是0位,也是零,你说

错不错??

差点把你忘了...
2005-01-12 09:37
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
可是没有0位呀!
难道你数数是从0开始的?不解~~

一但出现了0就说明根本就没这个字符~~~

淘宝杜琨
2005-01-12 09:40
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
我说的零位,就是i=0;没有可能么???
你看看上面的for循环i=0;开始的,不是么????

差点把你忘了...
2005-01-12 10:30
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
程序从0开始循环的,那是因为数组是从0开始的。 而我们数数是从1开始的,所以必须要人为的+1。 比如我们输入gay,那么这个程序就应该输出1,而不是0; 如果我们输入lalala,没有gay,那么这个程序就输出0。 0是个标志位,它标志着输入的字符中没有gay这3个字母连在一起。 而这个标志位不是我定的,是楼主定的~~不能改变的~~

淘宝杜琨
2005-01-12 10:42
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
不和你说了,理解能力太差!!!

差点把你忘了...
2005-01-12 10:55
快速回复:哪里出问题了?
数据加载中...
 
   



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

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