如题,找个方法,检查()、[]、{}这些成对的符号在输入时错位或者少输入了一个,如下面的几句话:
1.我来自Hongkong)香港(。
2.地球属于]银河系[,不属于[太阳系]。
3.饿饿微软撒地方(阿三地方),阿三地方]阿三地方[,这本书[西游记]。
类似于上面3种句子,里面的符号顺序错位了,或者还可能少输入了,能有什么办法检查出来。感谢各位帮忙。
1.我来自Hongkong)香港(。
2.地球属于]银河系[,不属于[太阳系]。
3.饿饿微软撒地方(阿三地方),阿三地方]阿三地方[,这本书[西游记]。
类似于上面3种句子,里面的符号顺序错位了,或者还可能少输入了,能有什么办法检查出来。感谢各位帮忙。
例如for"()",见到"("就加一,见到")"就减一,出现负数就错,到尾不为0也错。
{
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;
}
{
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;
}
}