输出时对齐输入的文本?

时间:2019-03-26 21:56:57

标签: c++ iostream

我正在开发一个程序,当用户输入文本时,他们可以指定如何对齐输出。因此,用户将在此处输入文字,然后询问他们想要的文字对齐方式和宽度(居中,左,右,然后是宽度)。您将如何获得宽度和对齐方式的代码?到目前为止,我只有获取用户输入的代码,但是我不确定如何使用户输入其条件(左,右,中心和宽度)的程序,然后对齐用户给出的输入。这是我到目前为止所得到的。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    vector<string> text;
    string line;

    cout << "Enter Your Text:(to start a newline click enter. When done click enter 2 times " << endl;

    while (getline(cin, line) && !line.empty())
        text.push_back(line);

    cout << "You entered: " << endl;

    for (auto &s : text)
        cout << s << endl;
    cout << "Enter Left,Center,Right and Width: ";
    return 0;
}

我认为也许我必须使用<iomanip>?但是我觉得还有另一种方式。输入将是这样的。

Hello My Name is Willi
John Doe
and I live in 
Kansas.

然后,当用户输入对齐方式时,文本将对齐,也就是说,用户输入的是右侧对齐方式,宽度为10。输出应为,应与右侧对齐(例如在文字处理器中),并且应有一个10个空格的宽度(我假设是空格)。

1 个答案:

答案 0 :(得分:0)

这是一种简单的方法。它仅根据对齐方式用空格填充每一行。左对齐基本上是输入文本。您可能还应该检查对齐宽度是否比输入的最长行宽def merge_sorted_list(list1,list2): i = j = 0 while(i < len(list1) and j < len(list2)): if(list1[i] > list2[j]): list1.insert(i, list2[j]) i+=1 j+=1 else: i+=1 if(j < len(list2)): list1.extend(list2[j:]) return list1 print(merge_sorted_list([1, 4, 7],[2, 3, 6, 9]))

>=

测试用例(实际输出具有空格,而不是#include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> text; std::vector<std::string> output; std::string line; std::string align; int width; std::cout << "Enter Your Text (to start a newline click enter. When done click enter 2 times): \n"; while ( std::getline(std::cin, line) && !line.empty() ) text.push_back(line); std::cout << "You entered:\n\n"; for ( auto &s : text ) std::cout << s << "\n"; std::cout << "Enter Left,Center,Right and Width: "; std::cin >> align; std::cin >> width; for ( auto &s : text ) { int diff = width - s.size(), half = diff / 2; if ( align == "Right" ) { output.push_back( std::string(diff, ' ') + s ); } else if ( align == "Center" ) { output.push_back( std::string(half, ' ') + s + std::string(diff - half, ' ') ); } else { output.push_back( s ); } } std::cout << "Aligned Output: \n\n"; for ( auto &s : output ) std::cout << s << "\n"; return 0; } ):

  

输入(alignment = Right,width = 10):

*
     

输出:

Hello my
name is
John Doe
     

输入(alignment = Center,width = 16):

**Hello my
***name is
**John Doe
     

输出:

Hello my name
is
John Doe