gpt4 book ai didi

c++ - .back 和排序功能

转载 作者:行者123 更新时间:2023-11-30 05:41:12 26 4
gpt4 key购买 nike

我完全是 C++ 的初学者,我被要求对一个 super 英雄的文本文件进行排序并将它们输出到另一个文本文件,例如

未排序.txt

死侍_8

凤凰_9

蟾蜍_4

Jubilee_3

按字母和数字顺序。

我试图对每行字符串使用 .back 进行数字排序,尽管它根本不会接受它并返回一个错误(我已将其包含在代码中),同时它很乐意写信给带有 cout 的完整控制台尝试写入文本文件只会导致字符串的最后一行,例如

蟾蜍_4

(我所有的错误都被注释掉了,目前只按字母排序)

我对问与其他人相同的问题有疑虑,但我一直无法找到解决我问题的任何方法。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <limits>
using namespace std;
// Empty vector holding names from file
vector<string> names;
string word;
string number;
string filename;
string sortChoice;
string lastChar;
bool alphaSortFinished = false; //bool added to prevent unnecessary looping
bool sortFinished = false;

void sortNumerically()
{
//word = word.back; returns this error
/*Error 1 error C3867: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::back': function call missing argument list; use
'&std::basic_string<char,std::char_traits<char>,std::allocator<char>>::back' to create a pointer to member
d:\visual studio 2013\assessment one mdu118\strings, classes assessment one\source.cpp 20 1 Strings, Classes Assessment One*/


cout << "Please specify the file you would like to open\n" << endl;
cin >> filename;

// Read names from specified file
ifstream inFile(filename);

while (!inFile && sortFinished == false)
{
cout << "Unable to open file\n";
inFile.close();
sortNumerically();
}

while (getline(inFile, word)) //get lines of the string, store them in string word;
{
names.push_back(word);
}

sort(names.begin(), names.end());

// Loop to print names
for (size_t i = 0; i < names.size(); i++)
{
//ofstream writeToFile;
//writeToFile.open("NumericalSort.txt");
//writeToFile << names[i] << '\n';
//writeToFile.close();
cout << names[i] << '\n';
}
sortFinished = true;
inFile.close();
}

抱歉,可能有很多废话涉及我没有包括的其他功能。我走错路线了吗?

提前致谢

最佳答案

填充字符串的vector

vector<string> names;
ifstream inFile(filename);
copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(names));

按字典顺序排序

sort(names.begin(), names.end());

按数字排序

sort(names.begin(), names.end(), cmpr());

cmpr 是一个自定义比较器,用于比较字符串的数字部分。

要获取字符串的数字部分,使用

int num = stoi(s.substr(s.find_last_of('_') + 1));

C++11 中的示例

sort(names.begin(), names.end(), [](const string & a, const string & b) {
int ia = stoi(a.substr(a.find_last_of('_') + 1));
int ib = stoi(b.substr(b.find_last_of('_') + 1));
return ia < ib;
});

参见 http://ideone.com/1Wcnvq演示

关于c++ - .back 和排序功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com