Код:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void printVector (const vector<string>& theVect, vector<bool>& bArray, int nItems){
for (int i = 0; i < nItems; ++i)
if (bArray[i] == true)
cout << theVect[i] << " ";
outFile << theVect[i];
cout << "\n";
outFile << "\n";
}
void nCombination(const vector<string> &Vect,int n, int r){
vector<bool> myBits(n, false); // everything is false now
int count = 1;
for (size_t i = n-1; i >= 0 && count <= r; --i, ++count){
myBits[i] = true;
}
do // start combination generator
{
printVector(Vect, myBits, n );
} while (next_permutation(myBits.begin(), myBits.end()));; // change the bit pattern
}
void nPermutation(vector<string> o, int r){
do {
for(int count = 0; count < r; count++){
cout << o[count] << " " ;
outFile << o[count] << " ";
}
cout<< endl;
outFile << endl;
}
while (next_permutation(o.begin(), o.end()));
}
int main(int argc, char** argv) {
int numofOps;
char Op;
int n;
int r;
string line;
ifstream myFile("infile.dat");
myFile >> numofOps;
myFile.ignore(1,'\n');
ofstream outFile;
outFile.open ("example.txt");
for(int q = 0; q < numofOps; ++q){
myFile.get(Op);
myFile >> n;
myFile>> r;
vector<string> original(n);
for(int i = 0;i <= n - 1; i++){
myFile.ignore(1,'\n');
myFile >> original[i];}
myFile.ignore(1,'\n');
sort(original.begin(), original.end());
cout<< '\n'<< endl;
if(Op == 'P'){
nPermutation(original, r);
}
else{
if(Op == 'C')
nCombination(original,n,r);
else
cout << "Incorrect Input" << endl;
}
original.clear();
}
outFile.close();
return 0;
}
Мой код работает, но когда я добавляю в outFile для записи всего в файл, называемый примером, он не работает. Как я могу распечатать результат функций?
Примеры были бы такими приятными !!
Одна непосредственная проблема, приходящая на ум:
if (bArray[i] == true)
cout << theVect[i] << " ";
outFile << theVect[i];
Python - единственный язык, о котором я знаю, который использует отступы для управления блокировкой операторов. В языках на основе C вы должны использовать фигурные скобки:
if (bArray[i] == true) {
cout << theVect[i] << " ";
outFile << theVect[i];
}
Кроме того, код, который вы указали, даже не должен компилироваться. Вы создаете outFile
как локальный параметр внутри main()
затем outFile
использовать его в других функциях, где он недоступен.
Вы должны либо сделать это "глобальным", переместив его из main()
чтобы каждая функция могла его видеть (неразумное, но, вероятно, самое быстрое решение здесь), либо передать его как параметр каждой функции, которая должна его использовать.
Для первого вы можете использовать:
using namespace std;
ofstream outFile; // taken from main().
Для последнего вопрос заключается в добавлении его для каждого вызова printVector()
, nCombination()
и nPermutation()
и изменения этих функций, чтобы они его принимали, например:
void nPermutation (
vector<string> o,
int r,
ofstream os
) {
os << "blah blah blah\n";
}
:
nPermutation (original, r, outFile);
outFile
из другой функции, потому что она имеет локальную область видимости дляmain
. Либо передайте его как другой параметр, либо сделайтеoutFile
глобальным - последний менее предпочтителен.