2016-06-29 62 views
1

我有一個文件用空格一句話分成兩列包含電話號碼的形式如下列表:如何在C++

Arvind 72580931 
Sachin 7252890 

我的問題是,我們如何能在兩列顯示的內容?

+3

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

+1

您可能會發現從[IO一些信息的方法操縱者](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