2016-06-29 6 views
1

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

Arvind 72580931 
Sachin 7252890 

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

+3

http://stackoverflow.com/questions/236129/split-a-string-in-c –

+1

Вы могли бы найти некоторые информативные методы из [гипергликемии манипуляторы] (http://en.cppreference.com/w/cpp/io/manip), доступные из стандартной библиотеки. – WhozCraig

ответ

1

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

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

Для того, чтобы получить имя и номер телефона, вам нужно проанализировать каждую строку в списке телефонных номеров. Затем вам нужно отформатировать вывод, вы можете использовать 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