洛谷P1308 统计单词数

先放题
在这里插入图片描述
传送门

题是很简单的,但是我看了很多人写的都和我的不一样,我就把我的方法写出来,也算是提供一种不同的思路。

这道题大多数人的想法应该都是用一个循环,将文章中的字母和给出单词的字母依次去比较。我一开始竟然还没想到可以这么做,我的思路大概就是重新创建一个数组,把文章中的单词一个个截取出来放到新数组里面,然后再用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;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值