关于c++:题解洛谷-P1308-统计单词数

36次阅读

共计 1372 个字符,预计需要花费 4 分钟才能阅读完成。

洛谷 P1308 统计单词数

思路

一开始,我的想法是不一次性读取第二行整行的字符串,二是一个单词一个单词地输出,再与第一行的字符串作比拟,然而提交代码之后发现了问题:如果第二行字符串的结尾是空格,就会出错。

错误代码

/*
 * @Description: 
 * @Author: 多多
 * @Date: 2020-10-25 17:35:26
 * @LastEditTime: 2020-10-26 07:33:38
 * @LastEditors: 多多
 */
#include <bits/stdc++.h>
using namespace std;

int main()
{freopen("./INPUT/P1308.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s1, s2;
    cin >> s1;
    transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
    bool bo = true;
    int pos = -1;
    int len_sum = 0;
    int sum = 0;
    while (cin >> s2)
    {transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
        if (s1 == s2)
        {if (bo)
            {
                pos = len_sum;
                bo = false;
            }
            sum++;
        }
        len_sum += s2.length() + 1;}
    if (bo)
    {cout << -1 << endl;}
    else
    {cout << sum << " " << pos << endl;}
    return 0;
}

接下来的思路

还是中规中矩一次性读入第二行字符串,再做子串匹配。

代码

/*
 * @Description: 
 * @Author: 多多
 * @Date: 2020-10-25 17:35:26
 * @LastEditTime: 2020-10-26 08:55:34
 * @LastEditors: 多多
 */
#include <bits/stdc++.h>
using namespace std;

int main()
{freopen("./INPUT/P1308.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s1, s2;
    cin >> s1;
    transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
    bool bo = true;
    int len_s1 = s1.length();
    int pos = 0;
    int pos_first = -1;
    int len_sum = 0;
    int sum = 0;
    getline(cin, s2);
    getline(cin, s2);
    transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
    while (s2.find(s1, pos) != string::npos)
    {pos = s2.find(s1, pos);
        if ((s2[pos - 1] == '' && s2[pos + len_s1] ==' ') || pos == 0)
        {if (bo)
            {
                pos_first = pos;
                bo = false;
            }
            sum++;
        }
        pos++;
    }
    if (bo)
    {cout << -1 << endl;}
    else
    {cout << sum << " " << pos_first << endl;}
    return 0;
}

正文完
 0