如何确定文本文件中单个制表符对应的等价空格数?
如何确定文本文件中制表符对应的等价空格数?
示例文本文件
0. ----.----1----.----2----.----3----.----4 1. |Hello1 2. | Hello2 3. | Hello3 4. |Hello4 Hello5 5. | Hello6 6. | Hello7 Hello8
我的C++实现代码
#include <iostream> #include <string> #include <fstream> using namespace std; int main(int argc, char const *argv[]) { bool valid; int index = 0; int indent = 0; string line; ifstream file(argv[1]); while (getline(file, line)) { valid = true; while (true) { if (index >= line.length()) { break; } if (valid && line[index] == ' ') { indent++; } else if (valid && line[index] == '\t') { indent += 4; } else if (line[index] == 'H') //example for other characters { // do something with character valid = false; } index++; } cout << indent << endl; index = 0; indent = 0; } file.close(); return 0; }
代码运行输出
0 4 8 0 20 8
问题
目前代码运行正常,但我了解到制表符对应的等价空格数可能为2或8,想知道如何确定该文本文件中单个制表符对应的空格数?
解决方法
1. 从文本对齐线索推断
看示例文本里的标尺和内容对齐关系:
- 第2行
Hello2起始位置对应标尺的4,第3行Hello3对应8,第6行Hello8对应20。这些位置的间隔(4、8、12)的最大公约数是4,说明这里的制表符等价于4个空格,和当前代码设定一致。 - 如果遇到对齐位置间隔是2、4、6的情况,制表符宽度就是2;要是间隔是8、16,那就是8。
2. 直接查看文件原始字符
用支持显示不可见字符的编辑器(比如VS Code开启「控制字符显示」、Notepad++开启「显示所有字符」)打开文件,直接分辨行首缩进是空格还是制表符。如果是制表符,结合标尺位置就能算出每个制表符对应的空格数。
3. 代码自动推断
修改代码,收集所有行中「首个非缩进字符的起始位置」,计算这些位置的最大公约数,这个公约数就是制表符对应的空格数。比如示例中,有效起始位置为4、8、20,它们的最大公约数是4,即可确定制表符宽度为4。
内容的提问来源于stack exchange,提问作者kamran nasirizad
相关产品推荐
相关产品推荐

