如何使用cout将文本右对齐?

时间:2017-03-26 19:56:55

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

假设我有一个字符串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

如何获得所需的输出?

4 个答案:

答案 0 :(得分:3)

您需要逐行阅读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);
}

答案 1 :(得分:1)

  

带有队列的简易解决方案:

#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;
}

答案 2 :(得分:0)

#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 = "";
        }


    }


}

答案 3 :(得分:-1)

#include <iostream>
#include <string>
int main (){
    std::string s="i am\ngoing\nto\ncuet";

    std::cout.width(75);
    for(int i=0 ; s[i]!='\0'; i++)
    {
            if(s[i]=='\n'){
                   std::cout<<s[i];
                   std::cout.width(75);
            }else{
                   std::cout<<s[i];
            }
    }
    std::cout <<std::endl;;
}

这应该有效。 :d