0

嘿伙计们,我有一个 C++ 问题。

我正在尝试编写一个程序,该程序将打开并读取一个包含数字和名称的 txt 文件,例如:“9 john 3 jane 7 tom 2 sam 6 tom 1 nicole 5 tom 4 jane 8 ben”

一旦我阅读了文件,我需要按照分配给它们的数字顺序将名称放在向量中。所以当我打印向量时,它应该是这个顺序:

妮可

山姆

汤姆

汤姆

汤姆

约翰

然后我需要采用排序后的向量并将名称放在一个新文件中,其中包含每个名称出现的次数。所以当我打印这个新文件时,输出应该是这样的:

妮可 1

山姆 1

简 2

汤姆 3

本 1

约翰 1

到目前为止,这是我的代码:(忽略 count_names 函数,因为我只使用它来测试我的输出)(我稍后需要执行递归函数,所以忽略我目前不需要的任何#include)

using namespace std;

void fill_vector ( vector<string> &v );

void print_vector ( vector<string> v );

int count_names ( vector<string> v );

int main()
{

    vector<string> v;
    string s;

    fill_vector(v);

    int num_names;
    num_strings = count_strings(v)/2;
    cout << "number of names " << num_names << endl;

    print_vector(v);

    return 0;

}

void fill_vector ( vector<string> &v )
{
    string s;

    ifstream fin;
    string input = "toy_names.txt";
    fin.open ( input.c_str() );
    fin >> s;

    while ( !fin.eof() )
    {
        v.push_back ( s );
        fin >> s;
    }
}

void print_vector ( vector<string> v )
{

    for ( int i = 0; i < v.size(); i++ )
        cout << v[i] << endl;
}

int count_names ( vector<string> v )
{

    int counter = 0;
    for ( int i = 0; i < v.size(); i++ )
    {
        counter++;
    }

    return counter;
}

所以到目前为止,这是我的输出:

9

约翰

3

7

汤姆

2

山姆

6

汤姆

1

妮可

5

汤姆

4

8

所以我需要帮助让它们按正确的顺序排列(名称按前面的数字顺序排列),然后将它们写入新的 txt 文件,谢谢

4

2 回答 2

1

您可以做 astd::vector<std::pair<int, std::string>>并仅用于std::sort(<yourvec>.begin(), <yourvec>.end()对您的成员进行排序。要创建std::pair<int, std::string>,请使用您的号码以及与之关联的名称调用构造函数。

于 2017-10-31T15:38:37.803 回答
0

如果数字是唯一的,请将数字和名称放入std::map<int, std::string>. 当你在它的时候,计算每个名字在 a 中出现的次数std::map<std::string, unsigned int>

于 2013-10-31T20:24:51.020 回答