2017-03-26 107 views
1

假設我有一個在下面給出一個字符串s:如何使用cout將文本對齊到右側?

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 

如何獲得所需的輸出?

+0

這不是文字對齊到右側,而且您沒有描述文本與右側對齊。與右側對齊的文本具有**右**大多數字符**對齊**。 –

+0

您需要處理**行**,因此您的代碼需要知道包含多行的字符串,並明確分別處理每行。它不是,也不是。 –

+0

@ n.m。我如何明確處理每一行?你能給個例子嗎? – akid

回答

2

您需要逐行閱讀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
#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

+0

在此代碼中,最右邊的字符未對齊。 – akid

+0

@akid您是否得到了與此類似的結果? http://cpp.sh/3vhxm –

+0

他是對的。這樣做是左對齊與一個巨大的縮進。 – user4581301

相關問題