CSP历年复赛题-P1308 [NOIP2011 普及组] 统计单词数
原题链接:https://www.luogu.com.cn/problem/P1308
题意解读:给定单词a,文本b,在b中找a的个数,并找a第一次出现的位置,注意b中任何位置可能含有多个连续空格。
解题思路:
通过双指针找b中每一个单词的首、尾位置i,j,与a进行一一比较即可。
注意1:比较时不考虑大小写,可以统一转成小写字符tolower()
注意2:如果写比较函数,不要把文本b作为参数传递,否则会超时,除非加引用string &b
注意3:输入要用getline(cin, str)
100分代码:
#include <bits/stdc++.h>
using namespace std;
string a, b;
int cnt = 0, first = -1, pos = 0;
//判断a与b[l]~b[r-1]是否相等
bool cmp(int l, int r)
{
if(a.size() != r - l) return false;
for(int i = 0; i < a.size(); i++)
{
if(tolower(a[i]) != tolower(b[l + i]))
return false;
}
return true;
}
int main()
{
getline(cin, a);
getline(cin, b);
for(int i = 0; i < b.size(); i++)
{
if(b[i] != ' ') //找到一个单词的首字符
{
int j = i;
while(b[j] != ' ' && j < b.size()) j++; //找到一个单词的末尾+1的位置
if(cmp(i, j))
{
cnt++;
if(first == -1) first = i;
}
i = j;
}
}
if(cnt > 0) cout << cnt << " " << first;
else cout << -1;
return 0;
}