[英]How to adjust the indentation of code in text file using c++?
我正在将文件 1 的代码复制到文件 2,但我希望文件 2 中的代码看起来像这样调整缩进:在开始缩进 = 0 时,打开的每个大括号都会增加缩进的深度,关闭的每个大括号都会减少例如缩进 4 个空格。 我需要帮助来解决这个问题
char preCh;
int depth=0;
int tab = 3;
int d = 0;
int pos = 0;
file1.get(ch);
while(!file1.eof())
{
if(ch=='{')
{
d++;
}
if(ch=='}'){
d--;
}
depth = tab * d;
if(preCh == '{' && ch=='\n'){
file2.put(ch);
for (int i = 0; i <= depth; i++)
{
file2.put(' ');
}
}
else
file2.put(ch);
preCh = ch;
ch = file1.get();
}
}
结果必须像在代码编辑器中一样缩进:
int main(){
if(a>0)
{
something();
}
}
也许,出乎你意料的是,你的问题没有简单的答案。
因此,您的代码将永远无法工作。
首先也是最重要的,您需要了解和定义缩进 styles。 请在Wikipedia中查看此处。 即使在您给定的迷你示例中,您也在混合 Allman 和 K&R。 所以,首先你必须清楚,用什么。
然后,您必须注意括号可能出现在引号、双引号、C 注释、C++ 注释中,甚至更糟糕的是,多行注释(以及#if 或#idefs)。 这会让生活变得非常艰难。
而且,对于右括号,例如 Allman 样式,只有在打印了“缩进空间”之后,您才会知道所需的缩进。 因此,在打印完整行之前,您需要面向行工作或使用行缓冲区。
例子:
}
在这一简单的行中,您将在打印空格后读取“}”字符。 这总是会导致错误的(太右)缩进。
只有这种情况的逻辑会很复杂。 Ant 然后假设语句如
if (x ==5) { y = 3; } } } }
所以,不幸的是我不能给你一个简单的解决方案。
需要一个解析器,或者我只是推荐任何一种美化器或漂亮的打印机
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.