第四章小结

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.三元组表内存

对于在实际问题中出现的大型的 稀疏矩阵,若用常规分配方法在计算机中 储存,将会产生大量的 内存浪费,并且在访问和操做的时候也会形成大量时间上的浪费,为了解决这一问题,从而产生了多种解决方案。
因为其自身的稀疏特性,经过压缩能够大大节省稀疏矩阵的内存代价。具体操做是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),而后再按某种规律存储这些三元组,这种方法能够节约存储空间
复制代码
 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
个方向上检索矩阵元素,而且增长了辅助数 组,可以直接访问矩阵的主对角元,可以从任意矩阵元素所在结点开始检索其所在行和列的后继结点。

相关文章
相关标签/搜索