c++ - C++:无法打印按预期格式化的文本
问题描述
我正在尝试打印此 LIST,但它让我发疯了。
所以这是我想要得到的输出:
Veranstaltungen:
1: Freitag 08:00 - 09:30 SU Informatik III Kevin Kaufmann H3
2: Freitag 10:00 - 11:30 Ueb Informatik III Kevin Kaufmann D 114
3: Freitag 12:15 - 13:45 Ueb Informatik III Kevin Kaufmann D 114
4: Montag 10:00 - 11:30 SU Mathe III Nathan Neuling B 301
5: Mittwoch 10:00 - 11:30 Ueb Mathe III Nathan Neuling D 209
6: Donnerstag 16:00 - 17:30 Englisch Sabine Sauber D 419
7: Dienstag 16:00 - 17:30 SU Digitale Systeme Willi Witzig H5
8: Dienstag 17:45 - 19:15 Ueb Digitale Systeme Willi Witzig D 114
这是我的代码中的打印功能:
我首先在这里尝试了这个简单的替代方案:
void CEvents::print()
{
cout << "Veranstaltungen:" << endl ;
for (int i = 0 ; i < counter;i++)
{
CWeekday Day = Events[i]->WeekDay;
cout<<i+1<<": "<<Events[i]->getDay(Day) << " ";
Events[i]->Block->print();
cout<<" "<<Events[i]->Name<<" "<<Events[i]->Teacher->Name<<" "<<Events[i]->Room->Name<< endl;
}
}
我从这段代码中得到了这个输出:
Veranstaltungen:
1: Freitag 08:00 - 09:30 SU Informatik III Kevin Kaufmann H3
2: Freitag 10:00 - 11:30 Ueb Informatik III Kevin Kaufmann D 114
3: Freitag 12:15 - 13:45 Ueb Informatik III Kevin Kaufmann D 114
4: Montag 10:00 - 11:30 SU Mathe III Nathan Neuling B 301
5: Mittwoch 10:00 - 11:30 Ueb Mathe III Nathan Neuling D 209
6: Donnerstag 16:00 - 17:30 Englisch Sabine Sauber D 419
7: Dienstag 16:00 - 17:30 SU Digitale Systeme Willi Witzig H5
8: Dienstag 17:45 - 19:15 Ueb Digitale Systeme Willi Witzig D 114
当然这个不能正常工作,因为它们都没有相同的长度,但至少这里的第一部分是正确的。
然后我尝试切换到 printf() 而不是 cout ,离结果更近了一点,但仍然不一样:
extern "C" void CEvents::print()
{
cout << "Veranstaltungen:" << endl ;
string a= " ";
for (int i = 0 ; i < counter;i++)
{
CWeekday Day = Events[i]->WeekDay;
printf("%d: %10s %5s",i+1,Events[i]->getDay(Day).c_str(),a.c_str());
Events[i]->Block->print();
printf("%30s %20s %10s\n",Events[i]->Name.c_str(),Events[i]->Teacher->Name.c_str(),Events[i]->Room->Name.c_str());
}
}
对于这段代码,我得到了这个输出:
1: Freitag 08:00 - 09:30 SU Informatik III Kevin Kaufmann H3
2: Freitag 10:00 - 11:30 Ueb Informatik III Kevin Kaufmann D 114
3: Freitag 12:15 - 13:45 Ueb Informatik III Kevin Kaufmann D 114
4: Montag 10:00 - 11:30 SU Mathe III Nathan Neuling B 301
5: Mittwoch 10:00 - 11:30 Ueb Mathe III Nathan Neuling D 209
6: Donnerstag 16:00 - 17:30 Englisch Sabine Sauber D 419
7: Dienstag 16:00 - 17:30 SU Digitale Systeme Willi Witzig H5
8: Dienstag 17:45 - 19:15 Ueb Digitale Systeme Willi Witzig D 114
现在第二部分是正确的(时间),而其他部分不是。如何正确制作这种格式?
解决方案
使用std::left
andstd::setw
应该可以得到你想要的格式。
由于您没有提供完整的示例,因此我不得不即兴发挥一点,但您应该能够将此代码改编为您的代码:
#include <vector>
#include <string>
#include <iostream>
#include <array>
#include <iomanip>
int main()
{
std::vector<std::array<std::string, 5>> data =
{
{ "Freitag", "08:00 - 09:30", "SU Informatik III", "Kevin Kaufmann", "H3" },
{ "Freitag", "10:00 - 11:30", "Ueb Informatik III", "Kevin Kaufmann", "D 114" },
{ "Freitag", "12:15 - 13:45", "Ueb Informatik III", "Kevin Kaufmann", "D 114" },
{ "Montag", "10:00 - 11:30", "SU Mathe III", "Nathan Neuling", "B 301" },
{ "Mittwoch", "10:00 - 11:30", "Ueb Mathe III", "Nathan Neuling", "D 209" },
{ "Donnerstag", "16:00 - 17:30", "Englisch", "Sabine Sauber", "D 419" },
{ "Dienstag", "16:00 - 17:30", "SU Digitale Systeme", "Willi Witzig", "H5" },
{ "Dienstag", "17:45 - 19:15", "Ueb Digitale Systeme", "Willi Witzig", "D 114" },
};
std::cout << "Veranstaltungen:\n";
for (size_t i = 0; i < data.size(); i++)
{
std::cout << (i+1) << ": " <<
std::left <<
std::setw(12) << data[i][0] <<
std::setw(16) << data[i][1] <<
std::setw(22) << data[i][2] <<
std::setw(16) << data[i][3] <<
data[i][4] << "\n";
}
}
推荐阅读
- xml - XSLT 拆分一个以逗号分隔的长字符串值
- node.js - mocha 和 chai 超过 2000 毫秒的单元测试错误。用于异步测试和钩子
- java - 大型数据集:没有一个配置的节点可用于大型数据集
- python - 如何将 Matlab 中的样条曲线转换为 python?
- kubernetes - 删除命名空间挂起自定义资源终结器
- java - 查找以 1 结尾的输入的下一个素数
- django - 如何将数据传递给基于类的视图方法?
- ios - 如何使用其 Web-API 让 IOS 应用播放 Spotify 播放列表?
- asp.net-mvc - 地图路由不使用默认操作
- swift5 - 'withUnsafeMutableBytes' 已弃用:使用 `withUnsafeMutableBytes