Как выровнять текст вправо, используя cout?

Предположим, у меня есть строка 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

Как я могу получить желаемый результат?

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

#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

-1
По вопросам рекламы [email protected]