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

时间:2015-06-02 05:45:07

标签: c++

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

int n = 3;

这将是缩进的字符数,然后我们有字符串,

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

然后我输出字符串

cout << s;

我怎么能这样做,所以输出的每一行都缩进n

2 个答案:

答案 0 :(得分:2)

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

如果ss是要打印的字符串,empty是包含空格字符的字符串,则将"\n"ss的所有实例替换为{{1} }}

有关执行此操作的代码,请参阅How to find and replace string?

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

答案 1 :(得分:1)

初始化一个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查找\n的第一个匹配项,然后在使用string::insert后添加n个空格,然后循环,直到所有\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.