Convert the contents in a Multi-line EditBox to a Matrix

當你把 EditBox 的 Multiline 和 Want Return 兩個 property 設為 True 後,你可以在 EditBox 中輸入這樣的內容:


1 2 3
4 5 6
7 8 9

看不見的換行符號,是 CR (Carriage Retrun) and LF (Line Feed), 分別對應 ASCII code 13 和 10, 在 C 語言中以 \r 和 \n 來表示:
1   2   3 \r \n
4   5   6 \r \n
7   8   9
如果用 GetWindowText() 把這字串抓下來,是一個長度 19 的字串:
1   2   3 \r \n 4   5   6 \r \n 7   8   9

接下來我們可以試著把這個字串轉到一個 3x3 的整數陣列中。


const int N = 3;
int a[N][N];
int nRow = 0;
int nColumn = 0;
char c;
CString str1;

GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
for (int i=0; i < str1.GetLength(); i++)
{
    if ( isdigit( c = str1.GetAt(i) ) )
	a[nRow][nColumn++] = ( c - 48 );
    else if ( c == '\n' )
    {
	++nRow;
	nColumn = 0;
    }
}

大家可以練習看看,把下圖左邊兩個 EditBox 的內容各轉換成一個矩陣,然後把矩陣相加的結果,顯示在右方那個 Read-Only 的 EditBox。
Matrix Addition