0

テキストファイルから入力を取得しています。すべてのテキストを読み、トークン化しました。

入力サンプルはこちら

.MAIN [
    .HEADING1 [ .TEXT 30000 ]
    .HEADING2 [
      [
        .TEXT1 YAMA
        .TEXT2 THAH
      ]
    ]
  ]

トークン化後、トークン リストには「.MAIN」、「[」、「.HEADING1」などが含まれます。ここで、特定の開始角かっこの閉じかっこのインデックスを見つけたいと考えています。たとえば、関数インデックス 0 (最初の開始角かっこ) を指定すると、関数は最後のインデックスを返す必要があり、.HEADING1 の開始角かっこの関数インデックスを指定すると、同じ行の閉じかっこのインデックスを返す必要があります。

4

4 に答える 4

2
int index = 3;
int bracketCount = 1;

for(int i = index + 1; i < tokenlist.Count; i++)
{
    if(tokenList[i] == "]")
    {
        bracketCount--;
    }
    if(tokenList[i] == "[")
    {
        bracketCount++;
    }
    if(bracketCount == 0)
    {
        index = i;
        break;
    }
}
于 2012-09-03T10:22:43.113 に答える
1

これを試してください:

        //Give it index of first bracket you want
        int myStartingIndex = 0;
        string s = "[ sfafa sf [fasfasfas ] [ test ] ]";
        int firstClosedIndex = s.IndexOf("]", myStartingIndex + 1);
        int firstOpenedIndex = s.IndexOf("[", myStartingIndex + 1);
        while (firstOpenedIndex < firstClosedIndex)
        {
            firstClosedIndex = s.IndexOf("]", firstClosedIndex + 1);
            firstOpenedIndex = s.IndexOf("[", firstOpenedIndex + 1);

            //Break if there is no any opened bracket
            //index before closing index
            if (firstOpenedIndex == -1)
            {
                break;
            }
        }

        Console.WriteLine("Required index is {0}", firstClosedIndex);
于 2012-09-03T10:22:24.547 に答える
0

スタックを使用して開き括弧 "[" をプッシュし、閉じ括弧 "]" でポップします。

于 2012-09-03T11:29:22.163 に答える
0
public int FindClosingBracketIndex(string text, char openedBracket = '{', char closedBracket = '}')
        {
            int index = text.IndexOf(openedBracket);
            int bracketCount = 1;
            var textArray = text.ToCharArray();

            for (int i = index + 1; i < textArray.Length; i++)
            {
                if (textArray[i] == openedBracket)
                {
                    bracketCount++;
                }
                else if (textArray[i] == closedBracket)
                {
                    bracketCount--;
                }

                if (bracketCount == 0)
                {
                    index = i;
                    break;
                }
            }

            return index;
        }
于 2019-07-10T12:54:31.980 に答える