C++刷题日记:Day 1

动物园管理员小明面临名单混乱和输入错误的问题,需使用小写且全匹配的字符串操作算法,找出K种指定动物在名单中的位置及出现次数。
摘要由CSDN通过智能技术生成

题目描述

小明是一野生动物园的管理人员,他统计了一份野生动物的名单,糟糕的是,因为操作不当导致打乱了名单,每种野生动物出现的次数都无法进行查询。

小明只能重新进行统计,已知名单中的动物名称只由大小写字母构成,不存在其他字符,屋漏偏逢连夜雨,小明的健盘输入也出现了问题,输入的动物名称可能与名单中的名称大小写不一致,所以只有当输入的名称与名单中的名称在都小写的情况下字母完全相同并且不是某个动物名称的一部分才说明是同一种野生动物,小明想要知道K种野生动物在名单当中的所有位置以及出现次数。

输入描述

第一行为一个字符串,只包含大小写以及空格,表示动物名单。

第二行为一个整数K,表示需要统计K种野生动物。

接下来K行,每行为一个字符串,只包含大小写字母,表示野生动物名称。

输出描述

输出若干行,如果出现过则输出2行,第一行若干个数字表示野生动物在名单当中的所有位置(只输出动物名称首字母在名单中的位置),第二行一个数字表示该野生动物出现的次数,如果没有出现过,则输出-1。

考察点

string字符串

=输入

===geline()输入

===正常输入

=运用

===字符串取长度

===字符串拼接

===字符串转小写

===字符串查找

参考答案

#include <iostream>
#include <string>
using namespace std;

int main()
{
    // 输入动物名单
    string animals;
    getline(cin, animals);
    int len_animals = animals.length(); // 获取名单长度
    for (int i = 0; i < len_animals; i++)
    {
        animals[i] = tolower(animals[i]); // 全部转小写
    }
    animals = ' ' + animals + ' '; // 为了保证不是查询的动物不是某个动物的一部分,头尾加空格

    // 输入统计动物数量
    int k;
    cin >> k;

    // 统计动物
    string find;
    for (int i = 1; i <= k; i++)
    {
        cin >> find;
        int len_find = find.length(); // 获取查询动物的长度
        for (int i = 0; i < len_find; i++)
        {
            find[i] = tolower(find[i]); // 全部转小写
        }
        find = ' ' + find + ' '; // 为了保证不是查询的动物不是某个动物的一部分,头尾加空格

        // 开始统计
        int pos = animals.find(find);
        if (pos == string::npos) // 找不到查询动物
        {
            cout << -1 << endl;
            continue;
        }
        int cnt = 0; // 统计的计数器
        while (pos != string::npos) // 还有出现的想要查询的动物
        {
            cout << pos << ' ';
            pos = animals.find(find, pos+1);
            cnt++;
        }
        cout << cnt;
    }
    return 0;
}

运行效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值