zoukankan      html  css  js  c++  java
  • 百度语言翻译机

    百度语言翻译机

    2006 年百度之星程序设计大赛初赛题目 6 

    百度语言翻译机 

    时限 1s 

    百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。 

    为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。 

    输入数据: 

    输入数据包含三部分 

    1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。 

    2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) . 

    3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符) 

    输出数据: 

    输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样) 

    输入样例





    PS 门户搜索部 

    NLP 自然语言处理 

    PM 产品市场部 

    HR 人力资源部 

    PMD 产品推广部 

    MD 市场发展部 

    百度的部门包括 PS , PM , HR , PMD , MD 等等,其中 PS 还包括 NLP 小组。 



    输出样例



    百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。



    注意: 

    1 . 输入数据中是中英文混合的,中文采用 GBK 编码。 

    2 . 为保证答案的唯一性,缩率语的转换采用正向最大匹配(从左到右为正方向)的原则。请注意输入例子中 PMD 的翻译。 
     
    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        int n;
        cout<<"input a number:";
        cin>>n;
        while((n>1000)||n<1)
        {
            cout<<"please input a real number:";
            cin>>n;
        }
    
        string s_name[1000],f_name[1000];
        for(int i=0;i<n;i++)
        {
            cin>>s_name[i]>>f_name[i];
        }
    
        //防止比较过程中断的先被找到,要对缩略语进行从长到段的排序 冒泡排序
        for(int i=0;i<n-1;i++)
            for(int j=i+1;j<n;j++)
            {
                if(s_name[i].length()<s_name[j].length())
                {
                    swap(s_name[i],s_name[j]);
                    swap(f_name[i],f_name[j]);
                }
            }
    
        
        string s;
        cout<<"\n please input the content:"<<endl;
        cin>>s;
    
        for(int i=0;i<n;i++)
        {
            while(s.find(s_name[i])!=string::npos)
            {
                int index=s.find(s_name[i]);
                s.erase(index,s_name[i].length());//删除简写的名称
                s.insert(index,f_name[i]);//插入全称
            }
        }
    
        cout<<"the full content is:"<<endl;
        cout<<s<<endl;
    
        return 0;
    }

    不使用string类的方法 用结构体实现

    #include<iostream>
    using namespace std;
    
    struct Baidu
    {
        char s_name[10];
        char f_name[100];
    };
    
    void sort_name(Baidu baidu[],int n)
    {
        for(int i=0;i<n-1;i++)
            for(int j=i;j<n;j++)
            {
                if(strlen(baidu[i].s_name)<strlen(baidu[j].s_name))
                    swap(baidu[i],baidu[j]);
            }
    }
    
    void replace_name(Baidu baidu[],char s[],int n)
    {
        int length;
        char tmp[1000];
        for(int i=0;i<n;i++)
        {
            char *p=strstr(s,baidu[i].s_name);
            while(p!=NULL)
            {
                length=strlen(baidu[i].s_name);
                *p=0;
                strcpy(tmp,p+length);//把简称后面的内容全部拷贝到tmp内
                //strcat(s,baidu[i].f_name);
                strcat(p,baidu[i].f_name);
                //strcat(s,tmp);
                strcat(p+strlen(baidu[i].f_name),tmp);
                p=strstr(s,baidu[i].s_name);
            }
        }
    }
    
    int main()
    {
        int n;
        cout<<"input the number of s-f word:";
        cin>>n;
        Baidu baidu[10];
        for(int i=0;i<n;i++)
            cin>>baidu[i].s_name>>baidu[i].f_name;
        sort_name(baidu,n);
        cout<<"input the content:"<<endl;
        char s[1000];
        cin>>s;
        replace_name(baidu,s,n);
        cout<<"replaced content is:"<<endl;
        cout<<s;
    }
  • 相关阅读:
    权限系统设计-day02
    权限系统设计-day01
    SSH集成(Struts+Spring+Hibernate)
    Spring-day03
    Spring-day02
    神经网络与深度学习
    深度学习概述
    结构化机器学习项目
    无监督学习方法
    《2018自然语言处理研究报告》整理(附报告)
  • 原文地址:https://www.cnblogs.com/coder2012/p/2710518.html
Copyright © 2011-2022 走看看