2011J_2:统计单词数

洛谷:P1308
OJ: I1308

代码实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**************************************************************** 
 * Description: 2011年普及组第2题  统计单词数
 * Author: Alex Li
 * Date: 2024-10-10 13:54:28
 * LastEditTime: 2024-10-10 13:59:12
****************************************************************/
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main() {
    string word, article;
    // 读取要查找的单词
    getline(cin, word);
    // 读取文章
    getline(cin, article);

    // 将要查找的单词转换为小写
    for (char &c : word) {
        c = tolower(c);
    }

    int count = 0; // 记录出现次数
    int first_pos = -1; // 记录首次出现位置

    int pos = 0; // 当前在文章中的位置
    int n = article.length();

    while (pos < n) {
        // 跳过空格
        while (pos < n && article[pos] == ' ') {
            pos++;
        }
        if (pos >= n) break;

        int word_start = pos; // 当前单词的起始位置

        // 提取当前单词,并转换为小写
        string current_word = "";
        while (pos < n && article[pos] != ' ') {
            current_word += tolower(article[pos]);
            pos++;
        }

        // 比较当前单词与要查找的单词
        if (current_word == word) {
            count++;
            if (first_pos == -1) {
                first_pos = word_start;
            }
        }

        // 继续处理下一个单词
    }

    if (count > 0) {
        // 找到了单词,输出出现次数和首次出现位置
        cout << count << " " << first_pos << endl;
    } else {
        // 未找到单词,输出-1
        cout << -1 << endl;
    }
    return 0;
}
Scroll to Top