先放题
传送门
题是很简单的,但是我看了很多人写的都和我的不一样,我就把我的方法写出来,也算是提供一种不同的思路。
这道题大多数人的想法应该都是用一个循环,将文章中的字母和给出单词的字母依次去比较。我一开始竟然还没想到可以这么做,我的思路大概就是重新创建一个数组,把文章中的单词一个个截取出来放到新数组里面,然后再用strcmp函数直接去和给出的单词进行比较。
剩下的就直接看代码吧,因为没学c++,代码是纯c语言的。
#include<stdio.h>
#include<string.h>
char c[1000002][100];//一个新的数组,用来存放从文章中摘取的单词
char b[1000002];//用来输入文章
int main()
{
char a[1][10];//用来输入指定的单词
int i,j;
int x=0,y,z=0;
int s=0,t;
long n,m,l;
scanf("%s",a[0]);
getchar();
gets(b);
n=strlen(b);
b[n]=' ';//这里将文章末加上一个空格,方便后面比较
m=strlen(a[0]);
for(i=0;i<m;i++){
if(a[0][i]>='A'&&a[0][i]<='Z')a[0][i]+=32;
}//如果存在大写字母,转换为小写字母
for(i=0,y=0;i<=n;i++){
if(b[i]!=' '){
if(b[i]>='A'&&b[i]<='Z')b[i]+=32;
c[x][y]=b[i];
y++;
}//当元素不为空格时,将元素依次存入数组c中,直到出现下一个空格,在下一个空格时对两个字符串进行比较
else {
l=strlen(c[x]);//因为strmmp函数的缺陷,还需判断两个字符串的长度是否相等
if(strcmp(a[0],c[x])==0&&l==m){
s++;
if(z==0){
t=i-y;
z=-1;
}//为了输出第一个给定单词的位置,利用z的值令这段代码只执行一次
}
y=0;
x++;
}
}
if(z!=-1)printf("-1");//如果单词未出现过,输出-1
else printf("%d %d",s,t);//否则输出单词出现的次数s和首次出现的位置t
return 0;
}