1、AI核心代碼node
在解決判斷獨立單詞與詞組時,雖然操做不同,可是具體操做無非大同小異。只是在這個單詞的基礎上以連續接踵的詞組替換罷了。ios
1 //獨立的me 2 if(t[j]=='m' && t[j+1]=='e' && (j==0 || isSeparator(t[j-1])) && isSeparator(t[j+2])){ 3 cout << "you"; 4 j += 2; 5 continue; 6 } 7 8 //獨立的can you 9 if (isCanyou(t, j)) { 10 cout << "I can"; 11 j += 7; 12 continue; 13 } 14 //判斷是否爲獨立的can you 15 bool isCanyou(char ch[],int n) { 16 if (ch[n] == 'c'&&ch[n + 1] == 'a'&&ch[n + 2] == 'n'&&ch[n + 3]==' ' && ch[n + 4] == 'y'&&ch[n + 5] == 'o'&&ch[n + 6] == 'u') { 17 if ((n == 0 || isSeparator(ch[n - 1])) && isSeparator(ch[n + 7])) { 18 return true; 19 } 20 } 21 return false; 22 }
而在這裏用到的兩樣新東西同時也是學到的兩點新知識:tolower和getchar函數
1.tolowerspa
tolower是一種函數,功能是把字母字符轉換成小寫,非字母字符不作出處理。和函數int _tolower( int c )功能同樣,可是_tolower在VC6.0中頭文件要用ctype.h3d
1 案例: 2 #include <iostream> 3 #include <string> 4 #include <cctype> 5 using namespace std; 6 int main() 7 { 8 string str= "THIS IS A STRING"; 9 for (int i=0; i <str.size(); i++) 10 str[i] = tolower(str[i]); 11 cout<<str<<endl; 12 return 0; 13 }
2.getchar()code
getchar()函數的做用是從計算機終端(通常爲鍵盤)輸入一個字符。getchar()函數只能接收一個字符,其函數值就是從輸入設備獲得的字符。htm
案例: #include <stdio.h> int main() { char a,b; a=getchar(); b=getchar(); putchar(a); putchar(b); return 0; } /*咱們輸入x-回車-y-回車 結果會是xy嗎?不是的 結果是a=x b='\n'(回車) 當咱們開始打x的時候,x在緩衝區,當咱們按下回車的時候,第一個getchar()才獲取到x這個值
順利存到a裏 但回車既是肯定又是字符,回車'\n'它也跟着進了緩衝區,而且和x一塊兒被釋放,x到了程序裏
回車('\n')也到了程序裏,而且被第2個 getchar()獲取,此時咱們輸入y,這時緩衝區裏有一個字符 'y',
而後咱們又按下回車,'y'和'\n'又一塊兒準備被釋放,因爲程序裏沒有第3個getchar(),因此'y'和'\n'還留在緩衝區,
但它們兩個已是在準備狀態中,若是程序又出現一個getchar(),'y'不須要你按回車它會直接進入到第3個getchar(),
getchar()是依次獲取,按前後順序,不會先獲取'\n',而'\n'正等待着立刻進入第4個getchar() */
2、稀疏矩陣壓縮儲存blog
關於三元組表和十字鏈表的使用:繼承
1.三元組表內存
1 結構定義 2 struct node 3 { 4 int i,j; //定義三元組的行、列號 5 int v; //三元組的值 6 }; 7 struct sparmatrix 8 { 9 int rows,cols; //稀疏矩陣的行、列數 10 int terms; //稀疏矩陣的非零元個數 11 struct node data[maxsize]; //存放稀疏矩陣的三元組表 12 };
2.十字鏈表 http://www.cnki.com.cn/Article/CJFDTOTAL-DWJS201105005.htm
十字鏈表繼承了單鏈表的插入和刪除操做。若
要在十字鏈表中插入 1 個結點,只需將該結點分別
插入其所在行的行鏈表以及其所在列的列鏈表即
可。若要在十字鏈表中刪除 1 個結點,可將該結點
分別從其所在的行鏈表和列鏈表中分離出來,而後
刪除該結點。因爲行、列鏈表的附加頭結點也均被
連接成了單鏈表,所以,十字鏈表行、列的擴充操
做也很方便。若要增長 1 行,須要首先將該行的附
加頭結點插入附加列鏈表,而後將該行元素分別插
入十字鏈表便可。
綜上所述,十字鏈表具備如下 2 個優勢:
1)結構靈活,擴展性強。十字鏈表的插入和
刪除操做十分方便、高效,而且可以靈活地擴展矩
陣的維數。
2)檢索方式靈活。十字鏈表可以在行、列 2
個方向上檢索矩陣元素,而且增長了輔助數 組,可以直接訪問矩陣的主對角元,可以從任意矩陣元素所在結點開始檢索其所在行和列的後繼結點。