2

テキスト ファイルを読み込んで、C++ で検索できるように整理しています。キーワードの配列と Web ページのリンク リストをテキスト ファイルに作成する必要があります。次に、各キーワードがノード自体へのポインターのリンクされたリストを持つことにより、キーワードを Web ページにリンクする必要があります。キーワード配列はアルファベット順である必要があり、Web ページ リストの順序は関係ありません。キーワードごとのリストがうまく機能していないようです。

これはキーワード クラスです。

class KeywordList
{
private:
    friend std::ostream& operator<<(std::ostream&, const KeywordList&);
public:
    struct Keyword
{
    std::string word;
    std::list<WebPageList::WebPage*> list;
};
Keyword keywords [1000];
std::size_t size;

KeywordList()
{
    size = 0;
}
~KeywordList() {}

void add(std::string value, WebPageList::WebPage* page)
{
    bool keepGoing = true;
    int i = 0;
    while (keepGoing)
    {
        if (value == keywords[i].word)
        {
            keywords[i].list.push_front(page);
            keepGoing = false;
        } else if (i == size) 
        {
            keywords[i].word = value;
            keywords[i].list.push_front(page);
            keepGoing = false;
            ++size;
        } else if (value < keywords[i].word) 
        {
            for (int j = size; j > i; --j)
            {
                keywords[j].word = keywords[j - 1].word;
                keywords[j].list = keywords[j - 1].list;
            }
            keywords[i].word = value;
            keywords[i].list.push_front(page);
            keepGoing = false;
            ++size;
        } else {
            ++i;
        }

    }
}

void search(std::string);

void printAllData()
{
    for (int i = 0; i < size; ++i)
    {
        std::cout << keywords[i].word << " : " << keywords[i].list.size() << " : ";
        WebPageList::WebPage * pagesList = keywords[i].list.front();
        while (pagesList)
        {
            std::cout << pagesList->url << " ";
            pagesList = pagesList->next;
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

これはウェブページのリンクされたリストです:

    class WebPageList
{

public:

struct WebPage
{
    std::string url;
    WebPage * next;
};

WebPage * head;

WebPageList()
{
    head = NULL;
}

void add(std::string value)
{
    WebPage * newPage;
    newPage = new WebPage;
    newPage->url = value;

    if (!head)
    {
        head = newPage;
        newPage->next = NULL;
    }
    else 
    {
        newPage->next = head;
        head = newPage;
    }
}

void printAllPages()
{
    WebPage * page = head;
    while (page)
    {
        std::cout << page->url << std::endl;
        page = page->next;
    }
}

そして、これがメインです:

ifstream dataFile;
    dataFile.open(argv[1], std::ios::in);

    KeywordList keywordList;
    WebPageList mainPages;

    int i = 0;
    std::string line;
    while (getline(dataFile, line))
    {
        std::string keyword, url;
        std::istringstream lineStream(line);
        lineStream >> url;
        mainPages.add(url);
        WebPageList::WebPage * passingPage = mainPages.head;

        while (lineStream >> keyword)
        {
            keywordList.add(keyword, passingPage);
            cout << endl;
            keywordList.printAllData();
        }
    }

    mainPages.printAllPages();

    dataFile.close();

これが私が得る出力です:

structures : 1 : http://test1 


structures : 1 : http://test1  
zzz : 1 : http://something http://test1



structures : 1 : http://test1  
zalgorithms : 2 : http://www.algorithms.com/ http://something http://test1  
zzz : 1 : http://something http://test1 


structures : 1 : http://test1  
zalgorithms : 2 : http://www.algorithms.com/ http://something http://test1  
zzz : 2 : http://somethingelse http://www.algorithms.com/ http://something http://test1 

http://somethingelse 
http://www.algorithms.com/ 
http://something 
http://test1

これは、次の入力ファイルに基づいています。

http://test1 structures 
http://something zzz 
http://www.algorithms.com/ zalgorithms  
http://somethingelse zzz

私は大きな損失を被っているので、どんな助けも本当に感謝しています!

4

0 に答える 0