向字符串高效地添加或插入可变数量的空格
问题描述:
我有一个简单的程序,可以插入或附加大量空格来对齐文本。向字符串高效地添加或插入可变数量的空格
f()
{
string word = “This word”;
const string space = “ “;
int space_num = 5; // this number can vary
for (int i = 0; i < space_num; i++)
{
word.insert(0, space);
}
cout << word;
}
现在这个工作,但我想知道是否有一个更有效的方式来做到这一点。不是在优化我的计划方面,而是在标准实践中。
我能想象两种可能的方法:
1 - 有没有一种方法来创建一个字符串的说20个车位,并追加这些空间的一部分,而不是反复地添加一个空格。
2 - 有没有办法创建一个可变数量的空格字符串并追加它?
答
是,无论采取份数和字符:
word.insert(0, space_num, ' ');
word.append(space_num, ' ');
对于对齐文本,请记住,你可以使用一个字符串流和<iomanip>
头,如std::setw
为好。
答
1 - 有没有办法创建一个20个空格的字符串,并追加这些空格的一部分,而不是重复添加一个空格。
是的,试试这个:
string spaces(20, ' ');
string portionOfSpaces = spaces.substr(0,10); //first 10 spaces
string newString = portionOfSpaces + word;
一般情况下,你可以使用substr
获得的空间部分,并做操作与子。
2 - 有没有办法用可变数量的空格创建字符串并追加它?
是的,看到字符串构造:string (size_t n, char c);
和string::append
无论你和TAOCP的答案是伟大的。我认为这个答案在调整信息方面提供了更多的信息,并且非常清晰和简洁。我会运行一个效率测试(如果可以的话),在确定最佳答案之前查看哪个更快。谢谢你们的快速和明确的答案。 – David 2013-05-14 03:40:41
我需要一个更好的速度测试程序,我想这是我的下一个项目。我认为这种方法出来得更快。我宁愿有比我得到的可怕的结果更具体的结果。 – David 2013-05-14 04:43:09
@David,你确定你的项目中的所有代码中的这部分是慢速部分吗? – chris 2013-05-14 05:03:55