[刷题]算法竞赛入门经典(第2版) 5-1/UVa1593 - Alignment of Code

书上具体所有题目:http://pan.baidu.com/s/1hssH0KO


代码:(Accepted,0 ms)

//UVa1593 - Alignment of Code
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<sstream>
#include<iterator>
#include<iomanip>
using namespace std;

vector<string> text[1009];
int num[100] = { 0 }, X = 0;
char line[200];

int main()
{
    //freopen("in.txt", "r", stdin);
    while (cin.getline(line, 200)) {
        istringstream in(line);
        istream_iterator<string> fi(in), eof;
        int y = 0;
        while (fi != eof) {
            text[X].push_back(*fi);
            num[y] = max(num[y], (int)fi->size());
            ++y, ++fi;
        }
        ++X;
    }
    for (int i = 0;i < X;++i) {
        int t = text[i].size() - 1;
        for (int j = 0;j < t;++j)
            cout << left << setw(num[j] + 1) << text[i][j];
        cout << *(text[i].rbegin()) << '\n';
    }
    return 0;
}

题意:把很多行的单词排整齐。本来每一行中的各个单词之间含有随机个空格或tab,现在要求每一列单词左对齐。很好懂。


分析:思路很简单:找出每一列单词的最大字母数,再根据此输出即可。紫书也说了,这章不难,主要练习一下STL。之前我抱着C++ Primer也啃了很久,那这章就把之前学到的不管是不是很偏的东西尽量都用上吧。
读取文件不仅用了<sstream>,而且用了头文件iterator,用了流迭代器。其实流迭代器这里并没有什么优势,直接用流读入就行。我只是练习一下。(因为对流还能有迭代器感觉很神奇)
对于头文件<algorithm>,用到了max函数。其实在这里的情况下并没有很划算。就是 a=max(a,b);的情况。直接if (a < b) a = b;更好,这样还省掉一些赋值。
输出直接用了头文件<iomanip>里的setw对齐,left左对齐,方便的很!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误提示是因为 `addWidget()` 方法要求传入的是 `QWidget` 类型的对象,而 `Gauge` 不是 `QWidget` 的子类,无法直接添加到布局中。 为了解决这个问题,可以使用 `QChartView` 类将 `Gauge` 包装成 `QWidget`,然后再将其添加到布局中。具体实现代码如下: ```python import sys import random from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QChartView from PyQt5.QtCore import QTimer from pyecharts.charts import Gauge, Bar from pyecharts import options as opts from PyQt5.QtChart import QChart class GaugeChart(QChartView): def __init__(self, gauge): super().__init__() self.chart = QChart() self.setChart(self.chart) self.setRenderHint(QPainter.Antialiasing) self.chart.legend().hide() self.chart.addSeries(gauge) self.chart.createDefaultAxes() self.chart.setTitle(gauge.options['title'].opts['title']) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建垂直布局 vbox = QVBoxLayout(self) # 创建仪表盘对象 gauge = Gauge() gauge.add("", [("Value", 0)]) gauge.set_global_opts(title_opts=opts.TitleOpts(title="Gauge Demo")) gauge_chart = GaugeChart(gauge) # 创建柱状图对象 bar = Bar() bar.add_xaxis(["A", "B", "C", "D", "E"]) bar.add_yaxis("Data", [0, 0, 0, 0, 0]) # 将仪表盘和柱状图添加到布局中 vbox.addWidget(gauge_chart) vbox.addWidget(bar) # 创建定时器,每隔1秒更新数据 self.timer = QTimer() self.timer.timeout.connect(self.updateData) self.timer.start(1000) # 设置窗口大小和标题 self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Dashboard Demo') self.show() def updateData(self): # 更新仪表盘数据 value = random.randint(0, 100) self.gauge_chart.chart.series()[0].setData([value]) # 更新柱状图数据 data = [random.randint(0, 100) for i in range(5)] self.bar.render_notebook().add_yaxis("Data", data, is_update=True) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 其中,`GaugeChart` 类继承自 `QChartView`,并将传入的 `Gauge` 对象添加到 `QChart` 中,然后再将 `GaugeChart` 对象添加到布局中。在更新数据时,需要使用 `setData()` 方法更新仪表盘的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值