如何知道文本文件中的一个制表符有多少个空格?

问题描述 投票:0回答:1

我有一个这样的文本文件:

0.  ----.----1----.----2----.----3----.----4
1. |Hello1
2. |    Hello2
3. |        Hello3
4. |Hello4              Hello5
5. |                    Hello6
6. |        Hello7      Hello8

我想在任何其他字符之前计算行开头的缩进。

这是我的代码:

#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 个空格。

如何知道文本文件中的一个制表符有多少空间?

c++ text tabs space
1个回答
0
投票

我的建议是将空格和制表符的计数存储在单独的变量中,而不是尝试将制表符转换为空格。

需要注意的是,制表符和空格是不同的字符,这种认识可能是有利的。选项卡甚至可能根据某些编辑器中的前一行显示

在 Python 中,使用缩进来定义代码块,因此必须避免混合空格和制表符,即使它们在视觉上看起来大小相似。在缩进中组合空格和制表符必定会导致错误,即“缩进中制表符和空格的使用不一致。”

例如,此代码表示该错误。

def nothing():
    print("Nothing") # 4 spaces
    print("Nothing") # 1 tab

这个也一样。

def nothing():
     print("Nothing") # 1 space 1 tab 1 space
     print("Nothing") # 1 space 1 tab 1 space
© www.soinside.com 2019 - 2024. All rights reserved.