C++ 有效地向字符串追加或插入可变数量的空格

C++ 有效地向字符串追加或插入可变数量的空格,c++,string,insert,append,C++,String,Insert,Append,我有一个简单的程序,可以插入或附加一些空格来对齐文本 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); } cou

我有一个简单的程序,可以插入或附加一些空格来对齐文本

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;
}
f()
{
string word=“这个词”;
常量字符串空格=”;
int space_num=5;//此数字可以变化
for(int i=0;icout是的,两者都要复制多个副本和一个字符:

word.insert(0, space_num, ' ');
word.append(space_num, ' ');
要对齐文本,请记住您可以使用字符串流和
标题,例如
std::setw

1-有没有一种方法可以创建一个由20个空格组成的字符串,并附加其中的一部分空格,而不是重复添加单个空格

是的,试试这个:

 string spaces(20, ' ');
 string portionOfSpaces = spaces.substr(0,10); //first 10 spaces
 string newString = portionOfSpaces + word;
通常,您可以使用
substr
获取一部分空格并对该子字符串执行操作

2–是否有方法创建具有可变空格数的字符串并将其追加


是,请参阅字符串构造函数:
string(大小\u t n,字符c)

为什么你要创建20个字符的
空格
,只是为了用
substr
提取前10个字符?只要创建你需要的空格数就行了!@DavidRodríguez dribeas如果我理解正确的话,我是按照OP的要求做的。但是我同意你的观点,我们只需要创建你需要的空格数ed.创建20意味着可以重复使用同一个空格字符串来格式化多个字符串,而不是为每个字符串创建一个空格字符串。是否更快?我不知道。@David:不太清楚,因为
substr
将创建字符串的副本。获取
substr
与在第一位。你和taocp的答案都很好。我认为这个答案提供了更多关于对齐信息的信息,并且非常清晰和简洁。我将进行效率测试(如果可以的话)在给出最佳答案之前,先看看哪个更快。谢谢你们快速清晰的回答。我需要一个更好的速度测试程序,我想这是我的下一个项目。我认为这种方法产生得更快。我宁愿得到具体的结果,也不愿得到糟糕的结果。@David,你确定在你的项目中所有代码中,这是一个缓慢的p艺术?我并不是真的担心在这种情况下速度太慢。我只是在寻找更好的方法。我的路线似乎有点笨拙。