假设我有一个字符串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
如何获得所需的输出?
答案 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