int disk_num; cin >> disk_num; cin.ignore(); // 忽略换行符,避免影响下面的 getline
vector<Disk> disk_vec; for (int i = 0; i < disk_num; ++i) { std::string disk; getline(cin, disk); int sum = 0; int left = 0; // 解析磁盘实际大小,转换为 M 单位 for (int right = 0; right < disk.size(); ++right) { if (disk[right] == 'M' || disk[right] == 'G' || disk[right] == 'T') { // 确定已经找到单位,切割出数字 auto number = stoi(disk.substr(left, right - left)); // 犯错 if (disk[right] == 'M') { sum += number; } elseif (disk[right] == 'G') { sum += number*1024; } elseif (disk[right] == 'T') { sum += number*1024*1024; } left = right + 1; } }
// 记录 disk_vec.emplace_back(sum, disk); }
// 排序 sort(disk_vec.begin(), disk_vec.end(), [](const Disk &left_disk, const Disk &right_disk) { return left_disk.size_ < right_disk.size_; }); // 输出原始字符串 for (const Disk &disk : disk_vec) { cout << disk.original_ << "\n"; }