将输出写入文件的不同列

时间:2011-12-06 16:13:32

标签: c++

您好我想知道是否有任何函数库可以让我方便地执行此操作,或者如果您对如何优雅地执行此操作有任何建议而无需编写行和代码行(这是我最终使用ofstream进行的操作)。

Loop over i
   Loop over j
      Evaluate f(i*alpha,j);
      Write f to column i;

像这样的东西。我需要比较QM问题的一百个不同的本征函数,而不是每个alpha值写一个文件,也会使绘图更容易。

我没有任何可用的结果谷歌谷歌,感谢任何帮助:)

2 个答案:

答案 0 :(得分:3)

您的问题是对齐的表格输出,即在视觉上具有列,还是能够写入例如第四场,之后是第二场?

对于前者:最小C ++解决方案使用<iomanip>

假设你有:

#include <iostream>
#include <vector>
#include <iomanip>

struct Date     { int year, month, day;
                  Date(int year, int month, int day)
                      : year(year), month(month), day(day) {}
                };
struct Time     { int hour, minute, second;
                  Time (int hour, int minute, int second)
                      : hour(hour), minute(minute), second(second){}
                };
struct Birthday { Date date;
                  Time time;
                  Birthday (Date date, Time time)  : date(date), time(time) {}
                };

std::ostream& operator<< (std::ostream &ofs, Time const &rhs) {
    using std::setw;
    return ofs << std::setfill('0')
               << setw(2) << rhs.hour << ':'
               << setw(2) << rhs.minute << ':'
               << setw(2) << rhs.second;
}
std::ostream& operator<< (std::ostream &ofs, Date const &rhs) {
    using std::setw;
    return ofs << std::setfill('0')
               << setw(4) <<  rhs.year << '-'
               << setw(2) << rhs.month << '-'
               << setw(2) << rhs.day;
}
std::ostream& operator<< (std::ostream &ofs, Birthday const &rhs) {
    return ofs << rhs.date << ' ' << rhs.time;
}


struct Dude {
    std::string first_name;
    std::string last_name;
    Birthday    birthday;
    Dude (std::string const &f, std::string const &l, Birthday const &b)
        : first_name(f), last_name(l), birthday(b) {}
};

然后你可以输出一个这样的简单表:

int main () {
    using std::setw;

    std::vector<Dude> d;
    d.push_back (Dude("John", "Doe",        Birthday(Date(1980,12,11),Time(6,45,0))));
    d.push_back (Dude("Max",  "Mustermann", Birthday(Date(1980,12,11),Time(6,45,0))));

    std::cout << std::left;

    // Output a fancy header.
    std::cout << std::setfill(' ')
              << setw(24) << "<last name>" << "| "
              << setw(16)  << "<first name>" << "| "
              << "birthday" << '\n';

    // Data output follows. Note: No lines of lines and code.
    for (std::vector<Dude>::iterator it=d.begin(), end=d.end(); it!=end; ++it) {
        std::cout << std::setfill(' ')
                  << setw(24) << it->last_name << "| "
                  << setw(16) << it->first_name << "| "
                  << it->birthday  << '\n';
    }

}

答案 1 :(得分:0)

如果您的算法允许您这样做,请重构循环以逐行写入:

Loop over j {
    Loop over i {
        Evaluate f(i*alpha, j);
        Write f to column i, <TAB>;
    }
    Write <CR><LF>
}