форматирование вывода — Как разделить слово с пробелами на два столбца в переполнении стека

У меня есть файл, содержащий список телефонных номеров в следующей форме:

Arvind 72580931
Sachin 7252890

У меня вопрос, как мы можем отобразить содержимое в двух столбцах?

1

Решение

Для начала необходимо разобрать каждую строку в списке телефонных номеров, чтобы узнать имя и номер телефона. Затем Вам нужно отформатировать вывод, Вы можете использовать std::setw(int) указать ширину вывода. Например:

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

std::vector<std::string> stringTokenizer(const std::string& str, const std::string& delimiter) {
size_t prev = 0, next = 0, len;
std::vector<std::string> tokens;

while ((next = str.find(delimiter, prev)) != std::string::npos) {
len = next - prev;
if (len > 0) {
tokens.push_back(str.substr(prev, len));
}
prev = next + delimiter.size();
}

if (prev < str.size()) {
tokens.push_back(str.substr(prev));
}

return tokens;
}

int main() {
const int size_name = 20, size_phone = 10;
std::cout << std::setw(size_name) << "NAME" << std::setw(size_phone) << "PHONE" << std::endl;

std::vector<std::string> directory = {
"Arvind 72580931",
"Sachin 7252890",
"Josh_Mary_Valencia 7252890"};

for (const std::string& contact : directory) {
std::vector<std::string> data = stringTokenizer(contact, " ");
std::cout << std::setw(size_name) << data.at(0) << std::setw(size_phone) << data.at(1) << std::endl;
}
}

Выход:

                NAME     PHONE
Arvind  72580931
Sachin   7252890
Josh_Mary_Valencia   7252890
2

Другие решения

Если вы хотите отобразить вывод в виде двух столбцов, вы можете рассмотреть возможность добавления символа табуляции (или двух) между ними.

cout << "name" << '\t' << "phone" << endl;
1

По вопросам рекламы [email protected]