向字符串高效地添加或插入可变数量的空格

问题描述:

我有一个简单的程序,可以插入或附加大量空格来对齐文本。向字符串高效地添加或插入可变数量的空格

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为好。

+0

无论你和TAOCP的答案是伟大的。我认为这个答案在调整信息方面提供了更多的信息,并且非常清晰和简洁。我会运行一个效率测试(如果可以的话),在确定最佳答案之前查看哪个更快。谢谢你们的快速和明确的答案。 – David 2013-05-14 03:40:41

+0

我需要一个更好的速度测试程序,我想这是我的下一个项目。我认为这种方法出来得更快。我宁愿有比我得到的可怕的结果更具体的结果。 – David 2013-05-14 04:43:09

+0

@David,你确定你的项目中的所有代码中的这部分是慢速部分吗? – chris 2013-05-14 05:03:55

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

+0

为什么要用20个字符创建'spaces'只是为了用'substr'提取前10个?首先创建你需要的空间数量! – 2013-05-14 03:37:35

+0

@DavidRodríguez-dribeas我是这么做的,因为如果我理解正确,OP会问这个问题。但我同意你的看法,我们只需要创建所需的空间数量。 – taocp 2013-05-14 03:41:39

+0

创建20意味着可以重复使用相同的空格字符串来格式化多个字符串,而不是为每个字符串创建一个空格字符串。它是否更快 - 我不知道。 – David 2013-05-14 03:46:00