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

Indenting multiline output by specified number of characters

本文关键字:输出 缩进 字符      更新时间:2023-10-16

我希望能够输出多行,并将它们全部缩进指定数量的字符。因此,如果我们输入

int n = 3;

这是要缩进的字符数,然后是字符串

string s = "This is a string.nThis is a string.nThis is a stringn";

和我要输出字符串

cout << s;

我怎样才能使输出的每一行都按n缩进呢?

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

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

请参阅如何查找和替换字符串?

根据您的应用程序,您可以将其转换为函数,并尝试重载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 stringn" + indents;

cout << s;

编辑:

由于您提到n的出现或位置是未知的,

您可以使用string::find查找n的第一个出现,然后在n后面添加空格,使用string::insert then循环,直到找到所有出现的n,并在其后面添加空格。

int n = 3;
string s = "This is a string.nThis is a string.nThis is a stringn";
// 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.