第四章小结
Posted zasmn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章小结相关的知识,希望对你有一定的参考价值。
一、AI核心代码
在解决判断独立单词与词组时,虽然操作不一样,但是具体操作无非大同小异。只是在这个单词的基础上以连续接踵的词组替换罢了。
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.tolower
tolower是一种函数,功能是把字母字符转换成小写,非字母字符不做出处理。和函数int _tolower( int c )功能一样,但是_tolower在VC6.0中头文件要用ctype.h
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()
getchar()函数的作用是从计算机终端(一般为键盘)输入一个字符。getchar()函数只能接收一个字符,其函数值就是从输入设备得到的字符。
案例: #include <stdio.h> int main() { char a,b; a=getchar(); b=getchar(); putchar(a); putchar(b); return 0; } /*我们输入x-回车-y-回车 结果会是xy吗?不是的 结果是a=x b=‘ ‘(回车) 当我们开始打x的时候,x在缓冲区,当我们按下回车的时候,第一个getchar()才获取到x这个值
顺利存到a里 但回车既是确定又是字符,回车‘ ‘它也跟着进了缓冲区,并且和x一起被释放,x到了程序里
回车(‘ ‘)也到了程序里,并且被第2个 getchar()获取,此时我们输入y,这时缓冲区里有一个字符 ‘y‘,
然后我们又按下回车,‘y‘和‘ ‘又一起准备被释放,由于程序里没有第3个getchar(),所以‘y‘和‘ ‘还留在缓冲区,
但它们两个已经是在准备状态中,如果程序又出现一个getchar(),‘y‘不需要你按回车它会直接进入到第3个getchar(),
getchar()是依次获取,按先后顺序,不会先获取‘ ‘,而‘ ‘正等待着马上进入第4个getchar() */
二、稀疏矩阵压缩储存
关于三元组表和十字链表的使用:
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
个方向上检索矩阵元素,并且增加了辅助数 组,可
以直接访问矩阵的主对角元,能够从任意矩阵元素
所在结点开始检索其所在行和列的后继结点。
以上是关于第四章小结的主要内容,如果未能解决你的问题,请参考以下文章