P1308 统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章

中的某一独立单词在不区分大小写的情况下完全相同,如果给定单词仅是文章中某一单词的一部分则不算匹配。

输入输出格式

输入格式:

 

共22行。

第11行为一个字符串,其中只含字母,表示给定单词;

第22行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

 

输出格式:

 

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从00 开始);如果单词在文章中没有出现,则直接输出一个整数-1−1。

 

题目解析:

           难点:
                  1.字符串相同的部分在文章中是否为一个独立的单词(判断标准,相同部分相邻两边是否全部为空格)
                  2.短字符串与长字符串的比较
                  3.首次出现位置的确认
          解决方法:
                  1." "+word+" "作为查询单词,这样可以查询单词的同时判定是否符合独立单词的标准
                  2.对于长字符串中的每个字符,设置bool变量f=1,遍历循环查询单词word,如果字符不符合,f=0,break跳出循环
                  3.word[j]!=words[i+j],如语句,不改变i的值,通过j值的改变来影响words的循环,在判定单词符合要求的同时,得到i位置

 代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
	string word,words,p,s;
	getline(cin,p);
	getline(cin,s);
	word=' '+p+' ';
	words=' '+s+' ';
	int i,j=0,count=0,adres=-1,f;
	transform(word.begin(),word.end(),word.begin(),::tolower);
	transform(words.begin(),words.end(),words.begin(),::tolower);
	for(i=0;i<words.length();i++){
		f=1;
		j=0;
		while(j<word.length()){
			if(word[j]!=words[i+j]){
				f=0;
				break;	
			}
			j++;
		}
		if(f){
			if(adres==-1) adres=i;
			count++;
		}
	}
	if(adres!=-1) cout<<count<<" "<<adres;
	else cout<<adres;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值