2987 문제 B P2 단어 수 통계

문제 B: P2 단어 수 통계
시간 제한: 1 Sec  메모리 제한: 128 MB 제출: 62  해결: 15  
제목 설명
단어 수 통계 (stat. cpp / c / pas)  일반적인 텍스트 편집기 에는 단 어 를 찾 는 기능 이 있 습 니 다. 이 기능 은 특정한 단어 가 글 에 있 는 위 치 를 빠르게 찾 을 수 있 고 특정한 단어 가 글 에 있 는 횟수 를 통계 할 수 있 습 니 다.
현재, 이 기능 을 실현 하기 위해 프로 그래 밍 을 하 십시오. 구체 적 인 요 구 는 단 어 를 지정 하 는 것 입 니 다. 주어진 글 에 나타 난 횟수 와 처음 나타 난 위 치 를 출력 하 십시오.메모: 단어 와 일치 할 때 대소 문 자 를 구분 하지 않 지만 완전히 일치 해 야 합 니 다. 즉, 단 어 는 글 의 특정한 독립 적 인 잔 차 와 대소 문 자 를 구분 하지 않 은 상태 에서 똑 같 아야 합 니 다 (사례 1 참조). 주어진 단어 가 글 의 한 단어의 일부분 일 경우 일치 하지 않 습 니 다 (사례 2 참조).
입력
파일 을 모두 두 줄 로 입력 하 십시오.
첫 번 째 행 위 는 알파벳 만 포함 하고 주어진 단 어 를 표시 하 는 문자열 입 니 다.
두 번 째 행동 문자열 은 알파벳 과 빈 칸 만 포함 하여 주어진 글 을 표시 할 수 있 습 니 다.
출력
한 줄 만 있 습 니 다. 글 에서 주어진 단 어 를 찾 으 면 두 정 수 를 출력 합 니 다. 두 정수 사 이 는 하나의 빈 칸 으로 구분 합 니 다. 각각 단어 가 글 에 나타 난 횟수 와 처음 나타 난 위치 (즉, 글 에서 처음 나 타 났 을 때 단어 이니셜 이 글 에 있 는 위치, 위 치 는 0 부터) 입 니 다.단어 가 글 에 나타 나 지 않 으 면 정수 - 1 을 직접 출력 합 니 다.
샘플 입력
    1:
To
to be or not to be is a question
    2:
to
Did the Ottoman Empire lose its power at that time

샘플 출력
    1:
2 0
    2:
-1

제시 하 다.
1 < = 단어 길이 < = 10.1 < = 문장 길이 < = 10, 000, 000.
경험 총화
여기 서 비교 하기 전에 문자열 을 모두 소문 자 (또는 대문자) 로 바 꿔 야 합 니 다. 일치 하 는 데 성공 할 때 텍스트 문자열 에 일치 하 는 패턴 문자열 의 앞 뒤 가 빈 칸 인지 확인 해 야 합 니 다. 빈 칸 이 어야 독립 된 단어 임 을 설명 할 수 있 습 니 다. 그렇지 않 으 면 제목 요구 에 부합 되 지 않 고 일치 하 는 횟수 가 증가 하지 않 습 니 다.
정확 한 코드
#include 
#include 
#include 
#include 
#include  
#include 
using namespace std;
const int maxn=300;
int nextval[maxn],pos;
bool flag=false;
void getNextval(string str)
{
	int j=-1;
	nextval[0]=-1;
	for(int i=1;i='A'&&str[i]<='Z')
			str[i]+=32;
	}
}
int KMP(string str1,string str2)
{
	int ans=0,j=-1;
	int n=str1.length(),m=str2.length();
	for(int i=0;i=0&&i=0&&i==n-1&&str1[i-m]==' '||i-m+1==0&&i==n-1)
			{
				ans++;
				if(flag==false)
				{
					pos=i-m+1;
					flag=true;
				}
			}
			j=nextval[j];
		}
	}
	return ans;
}
int main()
{
	int n,ans;
	string str1,str2;
	while(getline(cin,str1))
	{
		toLower(str1);
		getNextval(str1);
		ans=0;
		getline(cin,str2);
		toLower(str2);
		flag=false;
		ans+=KMP(str2,str1);
		if(ans==0)
			printf("-1
",ans); else printf("%d %d
",ans,pos); } return 0; }

좋은 웹페이지 즐겨찾기