noip2011普及组:统计单词

摘要:
主题描述的通用文本编辑器具有搜索单词的功能,可以快速定位特定单词在文章中的位置,有些还可以统计文章中特定单词的出现次数。1.≤ 单词长度≤ 10.输入格式的第一行是字符串,它只包含字母并表示给定的单词;第二行是一个字符串,只能包含字母和空格,表示给定的文章。样本输入Totobeornottobeisa问题样本输出20字符串学习:http://www.cnblogs.com/mr-wid/archive/2013/01/21/2870575.html#include#include#include#include#includeusingspacestd;vector<string>vec;向量<int>pos;字符串;斯特林林;stringLower{stringtmp=“”;charch;intlen=s.length();对于{ch=s[i];ifch+=32;tmp+=ch;}returntmp;}Intmain(){cin˃˃word;word=toLower;scanf;intst=-1,t=0;getline;line=toLowr;intflag=0;//查找文章中每个单词的位置。字符串不能通过=for{if(flag==0&&line[i]!

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位

置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章

中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,

即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),

如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

【数据范围】

1 ≤ 单词长度≤ 10。

1 ≤ 文章长度≤ 1,000,000。

【输入输出样例 1 说明】

输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。

【输入输出样例 2 说明】

表示给定的单词 to 在文章中没有出现,输出整数-1。

输入格式

第 1 行为一个字符串,其中只含字母,表示给定单词;

第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,

分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字

母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。

样例输入

To
to be or not to be is a question

样例输出

2 0

To

string学习:http://www.cnblogs.com/mr-wid/archive/2013/01/21/2870575.html 

#include<cstdio>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;
vector<string> vec;
vector<int> pos;
string word;
string line;
string toLower(string s)
{
    string tmp="";
    char ch;
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        ch=s[i];
        if('A'<=ch&&ch<='Z')
            ch+=32;
        tmp+=ch;
    }
    return tmp;
}
int main()
{
    cin>>word;
    word=toLower(word);
    scanf("%*c");
    int st=-1,t=0;
    getline(cin,line);
    line=toLower(line);
    int flag=0;
    //求出每个单词在文章中的位置 ,string 不可通过 = 修改
    for(int i=0;i<line.length();i++)
    {
        if(flag==0&&line[i]!=' ')
        {
            pos.push_back(i);
            flag=1;
        }
        if(flag==1&&line[i]==' ')
        {
            flag=0;
        }
    }
    /*
    for(int i=0;i<pos.size();i++)
        cout<<pos[i]<<endl;
    */
    
    stringstream ss;
    ss<<line;
    while(ss)
    {
        string tmp;
        ss>>tmp;
        vec.push_back(tmp);
    }
    
    for(int i=0;i<vec.size()-1;i++)
    {
        string tmp=vec[i];
        if(!word.compare(tmp))
        {
            if(st==-1)
            {
                st=pos[i];
            }
            t++;
        }        
    }
    
    if(st==-1)    cout<<-1<<endl;
    else    cout<<t<<' '<<st<<endl;
    
    return 0;
}

免责声明:文章转载自《noip2011普及组:统计单词》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇.Net基础:ASP.NET中的session存储模式运用Python thread &amp;amp; process下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java之拦截器Interceptor

1,拦截器的概念java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。目前,我们需要掌握的主要...

关于c++正则表达式的用法

本人最近在做一个项目,这个项目里面有一个功能是这样的,要求这个项目中提供搜索功能,简单的说,如果里面输入1-10 11,15,27,39这个字符串,那么你就要从中找到1,2,3,4,5,6,7,8,9,10和11,15,27,39等等这些数字。我考虑了很久,决定使用正则表达式来做,采用的原因有两点:其一,因为考虑到范围的问题(比如说位数不能超过三位)这样的...

基于 .NET 的 FluentValidation 验证教程

FluentValidation 是一个基于 .NET 开发的验证框架,开源免费,而且优雅,支持链式操作,易于理解,功能完善,还是可与 MVC5、WebApi2 和 ASP.NET CORE 深度集成,组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言。 虽然 FluentValidation 是一个非常强大的验证框架,但针对该框...

js动态生成二维码

一、使用jquery.qrcode生成二维码 1、首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.qrcode.min...

EF性能优化

十年河东,十年河西,莫欺少年穷。 EF就如同那个少年,ADO.NET则是一位壮年。毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET。 也就是说:你所写的LINQ查询,最后还是要转化为ADO.NET的SQL语句,转化过程中无形降低了EF的执行效率。 但是,使用EF的一个好处就是系统便于维护,减少了系统开发时间,降低了生成成本。 OK,上...

Java 设计模式--策略模式,枚举+工厂方法实现

项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一、什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决多重If判断问题。 1.环境(Context)角色:持有一个Strategy的引用。 2.抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象...