更改虚线长度以匹配输入字符串长度?

时间:2015-06-03 21:12:48

标签: c++

#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
int income;
int tax;

cout << "What is your full name?  ";
getline(cin,name);
cout << "What is your annual income?  ";
cin >> income;

if (income < 50000)
{
    tax = income*0.33;
}
else { tax = income*0.38; }

cout << "\t\t\t" << name << ": Tax Report" << endl;
cout << "\t\t\t" << "-------------------------" << endl;
cout << "Income =$" << income << endl;
cout << "Tax =$" << tax << endl;

system("pause");
return 0;
}

我希望连字符行与名称字符串的长度相匹配,而不管其长度如何。我在一个介绍性的c ++课程中,我确信有一个简单的方法可以做到这一点。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

cout << "\t\t\t" << string(name.length() + 12, '-') << endl;

答案 1 :(得分:2)

只需输入此行,而不是当前的虚线

cout << "\t\t\t" << std::string(name.length(), '-') << endl;

有关详细信息,请参阅http://en.cppreference.com/w/cpp/string/basic_string/basic_string

答案 2 :(得分:0)

您可以制作一定长度的连字符串。通过首先为名称行构建一个字符串然后调用其length方法来获取长度。这是一个例子:

std::string hyphens;
hyphens.assign(length, '-');

查看thislink以获取有关使用字符串的更多详细信息: http://www.cplusplus.com/reference/string/string/

答案 3 :(得分:0)

您可以通过以下方式执行此操作

#include <iostream>
#include <iomanip>

int main() 
{
    std::string name( "01234567890" );

    std::cout << "\t\t\t" << name << ": Tax Report" << std::endl;
    std::cout << "\t\t\t" << std::setfill( '-' ) << std::setw( name.size() ) 
              << '-' << std::endl;

    return 0;
}

程序输出

    01234567890: Tax Report
    -----------

如果您希望所有前面的行都加下划线,那么您需要tp将字符串“:Tax Report”的大小添加到std:;setw的参数中。例如

#include <iostream>
#include <iomanip>

int main() 
{
    std::string name( "01234567890" );

    std::cout << "\t\t\t" << name << ": Tax Report" << std::endl;
    std::cout << "\t\t\t" << std::setfill( '-' ) << std::setw( name.size() + 12 ) 
              << '-' << std::endl;

    return 0;
}

在这种情况下,porgram输出是

01234567890: Tax Report
-----------------------

因此,您只需要使用标题std::setfill中声明的函数std::setw<iomanip>。无需创建std::string类型的临时对象,因为它效率低下。