erdos数

#include <iostream>

#include "Erdos.h"

typedef struct data

{

    string m_str;

    int m_count;

}Data;



map<string, int>g_map;//字典映射

vector<string>g_str;//作者姓名字符串

vector<Data>g_name;//作者和出现的次数


//查找名字是否在字典中

int searchIndex(string &aName)

{

    map<string, int>::iterator it = g_map.find(aName);

    if (it != g_map.end())

        return (*it).second;

    return -1;

}

//将姓名字符串分单个字符串

vector < string > filter(string &aName)

{

    vector < string > name;

    int begin = 0;

    int end = (int)aName.find(".,", begin);

    

    while (end != string::npos)

    {

        name.push_back(aName.substr(begin, end - begin+1));

        begin = end + 2;

        end = (int)aName.find(".,", begin);

    }

    

    if (begin < (aName.length() - 1))

    {

        name.push_back(aName.substr(begin));

    }

    return name;

}


//设置作者的erdos的数字

void erdos_number(string &author, int number)

{


    vector <string> name = filter(author);

    for (int i = 0; i < name.size(); i++)

    {

        string temp = name[i];

        if (searchIndex(name[i]) < 0)

        {

            Data tmp;

            tmp.m_str = name[i];

            tmp.m_count = number;

            g_name.push_back(tmp);

            g_map.insert(pair< string, int>(name[i],number));

        }

    }


}


//调用

void erdos()

{

    g_map.clear();

    g_map.insert(pair< string, int>("Erdos,P.",1));

    Data tempData;

    tempData.m_str = string("Erdos,P.");

    tempData.m_count = 1;

    g_name.push_back(tempData);

    for (int i = 0;i < g_str.size();++i)

    {

        for (int j = 0;j < g_name.size();j++)

        {//有待优化

            string tmp1 = g_name[j].m_str;

            string tmp2 = g_str[i];

            if (g_str[i].find(g_name[j].m_str) != string::npos)

            {

                if (g_name[j].m_str != "Erdos,P.")

                {

                    erdos_number(g_str[i],g_name[j].m_count+1);

                }

                else

                {

                    erdos_number(g_str[i],g_name[j].m_count);

                }

                break;

            }

        }

    }

}

int main(int argc, const char * argv[])

{


    g_str.push_back(string("Erdos,P.,Smith,M.N.,Martin,G."));

    g_str.push_back(string("Erdos,P.,Reisig,W."));

    g_str.push_back(string("Smith,M.N.,Chen,X."));

    g_str.push_back(string("Smith,M.N.,Chen,Y."));

    g_str.push_back(string("Smith,M.D.,Chen,Y."));

    g_str.push_back(string("Jablonski,T.,Hsueh,Z."));

  

    erdos();

    char c[][20] = {"Smith,M.N.","Hsueh,Z.","Chen,X."};

    

    for (map <string, int>::iterator it = g_map.begin(); it != g_map.end();++it)

    {

        cout<<(*it).first<<"  ";

        cout<<(*it).second<<endl;

    }

    

    for (int i = 0;i < 3;++i)

    {

        string str(c[i]);

        int  tmp = searchIndex(str);

        if (tmp!=-1)

        {

            cout<<str<<" "<<tmp<<endl;

        }

        else

        {

            cout<<str<<" "<<"infinity"<<endl;

        }

    }

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值