哈哈,天使总是比我先
哦,快放假啦~~终于能回来看看我心爱的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个字符的位置,完成 -,-