我正在将文件 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();
}
}
也许,出乎你的意料的是,你的问题没有简单的答案。
正因为如此,你的代码将永远无法工作。
首先,也是最重要的一点,您需要了解和定义缩进样式。请参阅维基百科。即使在你给出的小例子中,你也在混合奥尔曼和K&R。所以,首先你必须清楚,使用什么。
然后,您必须注意括号可能会出现在引号、双引号、C 注释C++注释中,甚至更糟的是,多行注释(以及 #if 或 #idefs(。这会让生活变得非常艰难。
而且,对于右括号,例如奥尔曼样式,只有在您已经打印了"缩进空格"之后,您才会知道所需的缩进。因此,在打印整行之前,您需要以行为导向或使用行缓冲区。
例:
}
在这一行简单的行中,您将在打印空格后阅读"}"字符。这总是会导致错误(太右(缩进。
只有这种情况的逻辑会很复杂。然后蚂蚁假设这样的语句
if (x ==5) { y = 3; } } } }
所以,不幸的是,我不能给你一个简单的解决方案。
需要一个解析器,或者我只是推荐任何类型的美化器或漂亮的打印机