0
我正在開發自上而下的回溯解析器,但在導入語法時陷入困境。我的導師希望我們採取String[]
並將其轉換爲char[][]
。將字符串轉換爲二維字符數組
例如,教師將在命令行中鍵入一個語法a a S b X a a S a X a S a X
,我的程序應該把它放到一個2D char arrary中。
在輸入的X
的應該代表|
在語法,因此所得到的語法應該是
char[][] productions = new char[][] { {'a','a','S','b'},
{'a','a','S','a'},
{'a','S','a'},
{'\0'} };
凡\0
表示空字符串。下面的代碼生成char[4][]
,但我不確定如何爲每個單獨的生產製作陣列。
char[][] prod; int prodCount = 0, numProds = 0;
String[] input = new String[] {"a","a","S","b","X","a","a","S","a","X",
"a","S","a","X"};
for(int i = 0; i < input.length; i++) {
if(input[i] == "X")
prodCount++;
}
prod = new char[prodCount][];
for(int i = 0; i < prod.length; i++) {
for(int k = 0; k < input.length; k++) {
if(input[k] == "X") {
prod[i] = new char[numProds];
numProds = 0; break;
} else
numProds++;
}
}
for(int i = 0; i < prod.length; i++) {
for(int j = 0; j < input.length; j++) {
if(input[j] == "X") break;
prod[i][j] = input[j].charAt(0);
}
}
編輯: 我已經摸索出如何將語法轉換,但我堅持我如何能在我的二維數組涉及\0
。
char[][] prod; int prodCount = 0, numProds = 0;
String[] input = new String[] {"a","a","S","b","X",
"a","a","S","a","X",
"a","S","a","X"};
for(int i = 0; i < input.length; i++) {
if(input[i] == "X")
prodCount++;
}
prod = new char[prodCount][];
int current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
prod[current] = new char[numProds];
current++; numProds = 0;
} else
numProds++;
}
int currentTerminal = 0; current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
currentTerminal = 0;
current++;
}
else {
prod[current][currentTerminal] = input[i].charAt(0);
currentTerminal++;
}
}
我甚至沒有想到'分裂()':P – Delfino 2014-11-23 23:13:00
但是,我會用將導入爲語法一個'String []',所以我將無法使用'split()'。 – Delfino 2014-11-23 23:14:37