我希望能够输出多行并让它们全部缩进指定数量的字符。所以,如果我们有
int n = 3;
这将是缩进的字符数,然后我们有字符串,
string s = "This is a string.\nThis is a string.\nThis is a string\n";
然后我输出字符串
cout << s;
我怎么能这样做,所以输出的每一行都缩进n
?
答案 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.