我的程序試圖將特殊公式(請參閱示例)擴展爲明確的公式。有幾個術語,語法必須站在: - 沒有空格(「」)在整個公式 - 該公式僅包含圓括號「(,)」,而不是括號中的所有括號「{} []」 - 公式僅包含字母(az,AZ),數字(也包含數字)和圓括號。 - 對於每個開口支架,必須是合適的閉合支架。 - 公式不能以括號開頭。擴展和圖特殊處理公式
這裏是一些例子: *輸入: 'abz2(圖3(a)2(AB))一個 輸出:' abzaaaababaaaababa
- 輸入:「A2(A)6(G2(a)中)」 輸出: 'aAAgagagagagaga'
和繼承人的代碼:
bool ExistBrackets(string st)
{
for (int i = 0; i < st.Length; i++)
{
if (IsBracket(st[i]))
return false;
}
return true;
}
string AddChainDeleteBracks(int open, int close, string input)
{
string to="",from="";
//get the local chain multipule the number in input[open-1]
//the number of the times the chain should be multiplied
for (int i = input[open - 1]; i > 0; i--)
{
//the content
for (int m = open + 1; m < close; m++)
{
to = to + input[m];
}
}
//get the chain i want to replace with "to"
for (int j = open - 1; j <= close; j++)
{
from = from + input[j];
}
String output = input.Replace(from, to);
return output;
}
private void PopulateStartEnd()
{
//assuming that start and end are empty
int cS=0,cE=0;
//populate start
for (int i = 0; i < (textBox1.Text.Length); i++)
{
if (textBox1.Text[i] == '(')
{
start[cS] = i;
cS++;
}
if (textBox1.Text[i] == ')')
{
end[cE] = i;
cE++;
}
}
}
private string FigureInput(string st)
{
int i,close;
PopulateStartEnd();
//get the index in the start array which is populated
for (i = start.Length - 1; start[i] != 0; i--) ;
//populate the last letters if there is outside the brackets
while (!ExistBrackets(st))
{
//loop on the latest opening brackets in start array
for (; i >= 0; i++)
{
//find the suitable closing brackets in the end array
for (close = 0; ((end[close] > start[i]) && (end[close] != null)); close++) ;
st=AddChainDeleteBracks(i, close, st);
}
}
return st;
}
的主要方法是FigureInput
錯誤我得到:
** * ** 異常文本 ** * **** 系統。 IndexOutOfRangeException:索引超出了數組的範圍。 C:\ Projects_2012 \ Project_Noam \ Project \ myProject \ myProject \ Formula.cs中的myProject.Formula.PopulateStartEnd()中的 :行156 at myProject.Formula.FigureInput(String st)in C:\ Projects_2012 \ Project_Noam \ myProject的\ myProject的\ Formula.cs:線135 在myProject.Formula.generateButton_Click(對象發件人,EventArgs e)如C:\ Projects_2012 \ Project_Noam \項目\ myProject的\ myProject的\ Formula.cs:線36
您是否在異常被引發的位置檢查了不同字符串的值?字符串長度是否正確? 「開始」和「結束」數組是否以合適的大小初始化? – Oded 2012-04-11 11:10:59
開始和結束的大小相同,但並非所有單元格都已填充。你的意思是輸入字符串? – Noam650 2012-04-11 11:40:48
也可能是輸入字符串。異常表明你要訪問一個不存在的索引 - 它可能在'textBox1.Text','start'或'end'中(檢查'i','cS'和'cE的值'當發生異常並且與不同數組的'Length'進行比較時)。 – Oded 2012-04-11 12:34:29