我正在尝试用c ++创建一个程序,它围绕一些给定的代码行,并带有一个星形框,其中句子“整齐地”。我这样做是为了一个小文本,它只包含相同的句子而且有效。但是当试图让这个程序适用于只有一个以上句子的文本时,它会失败,因为句子的大小不一样。我该如何解决这个问题?这是我的代码
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
int r, c;
for( r = 0; r < 5; ++r )
{
for( c = 0; c < 28; ++c )
{
if( r == 0 || r == 4 )
{
cout << "*";
}
else
{
if( c == 0 || c == 27 )
cout << "*";
if(r >= 1 && c == 1){
cout << " this is a test sentence";
}
if(c > 1 && c < 4){
cout << " ";
}
}
}
cout << "\n";
}
return 0;
}
答案 0 :(得分:0)
您可能会更改代码,因此它使用变量,而不是文字常量。执行此操作后,您可以根据计算框宽度的方式选择两个选项:
已修复 - 使用cout << std::setw(fixed_width) << std::left << sentences[i];
(在循环中)
变量 - 使用循环或std::max_element
来确定最长的句子并执行与固定宽度相同的操作
您将使用std::vector<std::string> sentences
。
我还要补充一下你现在的整洁程度:
#include <iostream>
#include <string>
#include <iomanip>
using std::cout;
using std::endl;
int main()
{
const int width = 20;
const char c = '*';
std::string horizontal_line(width, c);
std::string horizontal_line_empty(c + std::string(width - 2, c) + c);
cout << horizontal_line << endl << horizontal_line_empty << endl;
cout << c << std::setw(width - 2) << std::left << std::string("hello") << c << endl;
cout << horizontal_line_empty << endl << horizontal_line << endl;
}
我希望你能从中获得一些东西。