求助,玄关
查看原帖
求助,玄关
1043610
TankmansYuanhaun26楼主2024/10/17 19:24

1400:统计单词数

时间限制: 1000 ms 内存限制: 65536 KB 提交数:54377 通过数: 18780 【题目描述】 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

【输入】 第 1 行为一个字符串,其中只含字母,表示给定单词;

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

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

【输入样例】 To to be or not to be is a question 【输出样例】 2 0 【提示】 样例输入:

样例 #2:

to Did the Ottoman Empire lose its power at that time 样例输出:

样例 #2:

-1

#include<bits/stdc++.h>
using namespace std;
string word;
int sum=0,sot;
char wos[10000050];
char wcp[10000050];
bool deng() {
	for(int i=0; i<strlen(wcp); i++) {
		if(wcp[i]!=word[i])return false;
	}
	if(strlen(wcp)>word.size()||strlen(wcp)<word.size())	return false;
	else	return true;
}
bool copy() {
	for(int i=0; i<strlen(wcp); i++) {
		if(wcp[i]>='A'&&wcp[i]<='Z')
			wcp[i]+=32;
	}
	bool bz=deng ();
	if(bz==true) {
		sum++;
		if(sum==1)return true;
	}
	return false;
}
int main() {

	cin>>word;
	for(int i=0; i<word.size(); i++) {
		if(word[i]>='A'&&word[i]<='Z')
			word[i]+=32;
	}
	int er=0,f=1;
	getchar();
	do {
		char rt=getchar();
		if(rt=='\n')f=0;
		else {
			wos[er]=rt;
			er++;
		}
	} while(f);
	int qum=0,ant=0;
	wos[strlen(wos)]=' ';
	for(int i=0; i<=strlen(wos); i++) {
		if(wos[i]==' ') {
			int y=i;
			for(int j=y-qum; j<=y-1; j++) {
				wcp[ant]=wos[j];
				ant++;
			}
			ant=0;
			bool s=copy();
			if(s==true) {
				sot=y-qum;
			}
			memset(wcp,0,sizeof(wcp));
			qum=0;
			
		} else {
			qum++;
		}
	}
	if(sum!=0)cout<<sum<<" "<<sot;
	else cout<<"-1";
}

测试点

2024/10/17 19:24
加载中...