C++ Primer笔记 从txt文件中查找某一个单词出现的次数/行号/该行自从出现位置的内容

p379

这里有个bug:需求是找出现的次数,当某行出现次数多于一次时,这个程序得到的就是一共出现在了多少行,

下面的运行结果为5次,实际element出现多过5次,只是出现在5行而已,所以这是个bug!


#pragma warning(disable: 4786)

#pragma warning(disable: 4503)

#include

#include

#include

#include

#include

#include

using namespace std;

 

//用来显示查找的该单词所在行的部分内容

void Show(vector::const_iterator beg, vector::const_iterator end)

{

    while (beg != end)

    {

        cout<<*beg++<<"  ";

    }

}

 

int main()

    ifstream infile("1.txt", ios::in); 

    if (!infile)

    {

        cerr<<"open file error!"<

        exit(1);

    }

    string str;

    unsigned int line = 0;                   //记录行号

    string strFind("element");              //待查单词

    map< unsigned int, vector > element; //保存待查元素行号,每行部分内容

    bool enter = false;                      //当某一行出现了待查元素后开始记录该行内容

 

    while(getline(infile, str))                 //读入一行至str

    {

        enter = false;

        ++ line;

        istringstream stream(str);     //用来从独到的一行内容中逐个取出单词

        string word;                          //记录每行中的单独的每个单词

        vector sentence;    //保存出现待查元素后该行的内容

        while (stream >> word)     //取出每行中每个单词

        {

            if (strFind == word)  //是否为待查单词

            {

                enter = true;

            }

            if (true == enter)  //开始记录待查单词所在行的内容

            {

                sentence.push_back(word);

            }

        }

        if (true == enter)

        {

            element.insert(make_pair(line, sentence));  //把行号和内容保存起来

        }

    }

 

    cout<

 

    for (map< unsigned int, vector >::const_iterator iter = element.begin(); iter != element.end(); iter ++)

    {

        cout<<"第"<first<<"行: ";

        Show((iter->second).begin(), (iter->second).end());

        cout<

    } 

 

    cout<

    return 0;

}


1.txt和运行结果




你可能感兴趣的:(C++ Primer笔记 从txt文件中查找某一个单词出现的次数/行号/该行自从出现位置的内容)