【问题标题】:How to Align text to the right using cout?如何使用 cout 将文本右对齐?
【发布时间】:2017-08-19 09:59:58
【问题描述】:

假设我有一个字符串 s,如下所示:

string s="i am\ngoing\nto\ncuet";

我想在控制台显示期间将字符串向右对齐。所以我想显示这样的输出:

编辑:最右边的字符应该对齐。

                                      i am
                                     going
                                        to
                                      cuet

我试过这段代码来显示输出:

cout.width(75);
cout<<s;

但它只会像这样右对齐第一行:

                                                         i am
going
to
cuet

然后我尝试了这段代码来获取输出:

for(int i=0 ; i<s.size(); i++)
    {
        cout.width(75);
        cout<<s[i];
    }

但是我使用这段代码得到了特殊的输出:

                                                                  i

                                                        a
                                                   m

                                                                  g
                                                             o
                                                        i
                                                   n
                                              g

                                                                  t
                                                             o

                                                                  c
                                                             u
                                                        e
                                                   t

我怎样才能得到想要的输出?

【问题讨论】:

标签: c++ string output cout right-align


【解决方案1】:

你需要逐行读取s,然后将每一行右对齐输出。

#include <iostream>
#include <iomanip>
#include <sstream>

void printRightAlignedLines(const std::string& s, int width)
{
    std::istringstream iss(s); //Create an input string stream from s
    for (std::string line; std::getline(iss, line); ) //then use it like cin
        std::cout << std::setw(width) << line << '\n';
}

int main()
{
    std::string s = "i am\ngoing\nto\ncuet";
    printRightAlignedLines(s, 75);
}

【讨论】:

    【解决方案2】:

    使用队列的简单解决方案:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    string str;
    str = "i am\ngoing\nto\ncuet";
    queue <char> q;
    int i;
    int len=str.size();
    for(i=0; i<len; i++)
    {
    if(i==len-1)q.push(str[i]);
    
        if(str[i]=='\n' || i==len-1)
        {
            cout.width(75);
            while(!q.empty())
            {
                cout<<q.front();
                q.pop();
            }
            cout<<"\n";
        }
        else
            q.push(str[i]);
    }
    return 0;
    }
    
    【解决方案3】:
    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
    
        string s="i am\ngoing\nto\ncuet";
        string p = "";
    
        for(int i=0;s[i]!='\0';i++){
    
            p = p+s[i];
    
            if(s[i]=='\n'){
                cout.width(75);
                cout<<p;
                p = "";
                continue;
            }
    
            if(s[i+1]=='\0'){
                p = p+'\n';
                cout.width(75);
                cout<<p;
                p = "";
            }
    
    
        }
    
    
    }
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多