T1039找单词 (在文章中找单词并记录单词出现的次数)

字符串问题:找单词

题目中的要求

1.匹配时不区分大小写

2.除大小写以外完全匹配,如果给定单词仅是文章中某一单词的一部分则不算匹配

解决方案

1.针对Q1,输入后将单词以及文章全部转换成小写

2.针对Q2,查询单词前将单词前后加上空格,并在文章前后加上空格以应对单词在开头和末尾的情况

3.针对输出:输出单词在文章中出现的次数,每次记录下find( )函数返回的这个单词第一次出现的位置,再从这个位置开始继续寻找即可

在此贴出方案3的源码:

  int x = article.find(word);//定义x为找到的第一个word的下标
        int s = 0;//s为word出现的次数
        while (x != -1)//读取整个article直到读完
        {
            s++;
            x = article.find(word, x + 1);//从下标的下一个开始寻找
        }

此时s的值就是单词在文章中出现的次数

将以上结合后得到解题的源码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int i;
    string word, article;
    getline(cin, word);
    getline(cin, article);
    int len1 = word.size();
    int len2 = article.size();
    for (i = 0; i < len1; i++)
    {
        if (word[i] >= 'A' && word[i] <= 'Z')
            word[i] = word[i] - 'A' + 'a';
    }
    for (i = 0; i < len2; i++)
    {
        if (article[i] >= 'A' && article[i] <= 'Z')
            article[i] = article[i] - 'A' + 'a';
    }
    word = ' ' + word + ' ';
    article = ' ' + article + ' ';
    int n = article.find(word);//在article中寻找word的第一个下标
    if (n == -1)//若没找到
        cout << -1 << endl;
    else//若找到
    {
        int x = article.find(word);//定义x为找到的第一个word的下标
        int s = 0;//s为word出现的次数
        while (x != -1)//读取整个article直到读完
        {
            s++;
            x = article.find(word, x + 1);//从下标的下一个开始寻找
        }
        cout << s << ' ' << n;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值