← 返回题目页

P1308 [NOIP 2011 普及组] 统计单词数

标程

#include <bits/stdc++.h>
using namespace std;

int main() {
    string word, article;
    cin >> word;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    getline(cin, article);
    if (!article.empty() && article.back() == '\r') article.pop_back();

    for (char &c : word) c = (char)toupper((unsigned char)c);

    int cnt = 0, first = -1;
    int n = (int)article.size();
    for (int i = 0; i < n; ) {
        if (!isalpha((unsigned char)article[i])) { i++; continue; }   // 空格不是单词的一部分
        int j = i;
        while (j < n && isalpha((unsigned char)article[j])) j++;
        // [i, j) 是一整个独立单词
        if (j - i == (int)word.size()) {
            bool same = true;
            for (int k = 0; k < (int)word.size(); k++) {
                if (toupper((unsigned char)article[i + k]) != word[k]) { same = false; break; }
            }
            if (same) {
                cnt++;
                if (first == -1) first = i;
            }
        }
        i = j;
    }

    if (cnt == 0) cout << -1 << "\n";
    else cout << cnt << " " << first << "\n";
    return 0;
}

动画演示