如题,找个方法,检查()、[]、{}这些成对的符号在输入时错位或者少输入了一个,如下面的几句话:
1.我来自Hongkong)香港(。
2.地球属于]银河系[,不属于[太阳系]。
3.饿饿微软撒地方(阿三地方),阿三地方]阿三地方[,这本书[西游记]。
类似于上面3种句子,里面的符号顺序错位了,或者还可能少输入了,能有什么办法检查出来。感谢各位帮忙。

解决方案 »

  1.   

    这个么,挨个字符数就是了,
    例如for"()",见到"("就加一,见到")"就减一,出现负数就错,到尾不为0也错。
      

  2.   

    c#就是好,有现成的栈,c语言还要自己实现呢static bool ParseString(string str)
    {
         bool result = false;
         Stack<char> symbols = new Stack<char>();     for (int i = 0; i < str.Length; i++)
         {
             char ch = str[i];
             switch (ch)
             {
                  case '(':
                  case '[':
                  case '{':
                       symbols.Push(ch);
                       break;              case ')':
                        if (symbols.Count > 0 && symbols.Peek() == '(')
                            symbols.Pop();
                        else
                            return false;
                         break;
                  case ']':
                        if (symbols.Count > 0 && symbols.Peek() == '[')
                            symbols.Pop();
                        else
                            return false;
                        break;
                  case '}':
                        if (symbols.Count > 0 && symbols.Peek() == '}')
                            symbols.Pop();
                        else
                            return false;
                        break;
             }
         }
         if (symbols.Count == 0) result = true;
             return result;
    }
      

  3.   

    只能找缺少的符号,public class Symbol
    {
        public int Index { get; set; }
        public char Code { get; set; }
        public string Error { get; set; }    public static int SortByIndex(Symbol obj1, Symbol obj2)
        {
            int result = 0;
            if (obj1.Index > obj2.Index) result = 1;
            else if (obj1.Index < obj2.Index) result = -1;
            else result = 0;
            return result;
        }
    }public class SymbolTable
    {
        public static Dictionary<char, char> Left_Symbol_Table = new Dictionary<char, char>();
        public static Dictionary<char, char> Right_Symbol_Table = new Dictionary<char, char>();
        static SymbolTable()
        {
            Left_Symbol_Table.Add('(', ')');
            Left_Symbol_Table.Add('[', ']');        Left_Symbol_Table.Add('{', '}');
            Left_Symbol_Table.Add('<', '>');        foreach (KeyValuePair<char, char> kp in SymbolTable.Left_Symbol_Table)
            {
                Right_Symbol_Table.Add(kp.Value,kp.Key);
            }
        }
    }class Program
    {
        static void Main(string[] args)
        {
            string[] test =
            {
                "1.我来自Hongkong)香港(。",
                "2.地球属于]银河系[,不属于[太阳系]。",
                "3.饿饿微[软撒地方(阿三地方),阿三地方]阿三地[[[方[,这本书[西游记]。"
            };        foreach (string str in test)
            {
                Console.WriteLine(str);
                IList<Symbol> errors = ParseString(str);
                foreach (Symbol err in errors)
                {
                    Console.WriteLine("\t" + err.Error);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }    public static IList<Symbol> ParseString(string str)
        {
            List<Symbol> errorList = new List<Symbol>();
            Stack<Symbol> symbols = new Stack<Symbol>();        string errorMsg = "Error index:{0}---缺少符号:'{1}'!";        for (int i = 0; i < str.Length; i++)
            {
                char ch = str[i];
                if (SymbolTable.Left_Symbol_Table.Keys.Contains(ch))
                {
                    symbols.Push(new Symbol()
                    {
                        Index = i,
                        Code = ch,
                        Error = string.Format(errorMsg, i, SymbolTable.Left_Symbol_Table[ch])
                    });
                    continue;
                }
                if (SymbolTable.Right_Symbol_Table.Keys.Contains(ch))
                {
                    if (symbols.Count > 0 && symbols.Peek().Code == SymbolTable.Right_Symbol_Table[ch])
                    {
                        symbols.Pop();
                    }
                    else
                    {
                        errorList.Add(new Symbol()
                        {
                            Index = i,
                            Code = ch,
                            Error = string.Format(errorMsg, i, SymbolTable.Right_Symbol_Table[ch])
                        });
                    }
                    continue;
                }
            }        while (symbols.Count > 0)
                errorList.Add(symbols.Pop());
            errorList.Sort(Symbol.SortByIndex);        return errorList;
        }
    }
      

  4.   

    hwenycocodq520威武,问题解决,感谢。