按指定字符数缩进多行输出

Indenting multiline output by specified number of characters

我希望能够输出多行并让它们全部缩进指定数量的字符。所以,如果我们有

int n = 3;

这将是要缩进的字符数,然后我们得到了字符串,

string s = "This is a string.\nThis is a string.\nThis is a string\n";

然后我要输出字符串,

cout << s;

我怎样才能让输出的每一行都缩进 n

一个粗略的解决方法是在要打印的字符串中找到 \n 的所有实例,并在每次出现 "\n" 后添加一个包含指定长度的空白 space 字符的字符串.

如果ss是要打印的字符串,而empty是一个包含空白space字符的字符串,则将"\n"中的所有实例替换为[=12] =] 来自 "\n" + empty

请参阅 How to find and replace string? 以获取执行此操作的代码。

根据您的应用程序,您可以将其转换为函数,并尝试重载 cout 以在打印任何字符串时调用它(不确定它是否有效)。

初始化将存储空格的string变量,然后通过循环向其添加空格。

int n = 3;
string indents;

for (int c = 0; c < n; c++)
    indents += " ";

将所有内容组合成一个字符串,

string s = "This is a string.\n" + indents + "This is a string.\n" + indents + "This is a string\n" + indents;

cout << s;

编辑: 由于您提到 \n 的出现次数或位置未知,

您可以使用 string::find to find the first occurrence of \n, then add n spaces after it using string::insert 然后循环直到找到所有出现的 \n 并在其后添加空格。

int n = 3;
string s = "This is a string.\nThis is a string.\nThis is a string\n";

// first occurrence
size_t pos = s.find("\n");

while (pos != string::npos) {

    // insert n spaces after \n
    s.insert(pos + 1, n, ' ');

    // find the next \n
    pos = s.find("\n", pos + 1);
}
cout << s;

输出

This is a string.
   This is a string.
   This is a string.