标签:注释 编译 第一个 node 一点 com struct 第四章 字符串
一、病毒匹配这个程序主要就在三个函数
第一个比较简单,想方设法把下标0从1开始,
于是,就用了strcat 的方法,在主串和模式串的前面加个任意字符的。
但是在vs 的时候出现了一个内存不足的问题?
于是把这个改成了如图所示 strcat_s, 编译没有问题了,但是在pta 上面会显示编译错误。
当变成原来的就又成功了。。。但是在vs上无法成功,
存在异常??是什么东西??
这个问题还没有解决。
第二个函数就是得到next[ ] 的值,这个很难搞懂,搞懂了也不会自己打,还是看着书来的,自己写的注释也不知道对不对,不知道理解有没有问题。
但是总觉得模模糊糊,乱七八糟的。反正主要目的是找到最长相同前后缀,经过看了好几次某同学的博客终于大概理解了一点。
第三个函数是kmp 算法,据我理解应该就是比较主串的i 位置与模式串的j 位置是否相同,与BF算法不同的是,KMP回溯的是模式串的j ,令j = next[ j ],容易理解。
BF算法是比较容易理解的,遇到不相同的就将主串的i 回溯到之前的下一个继续匹配,但是很浪费时间,其时间复杂度为n*m;
而KMP的是m+n;
这是本次通过写这道题得出的一些小看法。
二、稀疏矩阵
(非零元素比较多)
主要就是这个三元组
typedef struct { int i; //行 int j; //列 int value; //值 }node; //三元组 typedef struct { int m; //行 int n; //列 int cnt; //非零个数 node a[500];//三元组 }matrix; matrix m;
三、AI核心代码
虽然是老师手把手交的,但还是又很多问题出现。
int main() { int n; string s; cin>> n; getchar(); //吸收回车<cstdio> for(i=0;i<n;i++) { getline(cin,s); cout<<s<<endl; cout<<"AI:"; go(s); //根据s 输出AI } return 0; } void go(string s ){ //根据s输出AI;下面写关于AI的要求 string t;//新字符串 int i,j; //i定位到s 的第一个非空 for(i=0; s[i]!=‘\0‘&& s==‘ ‘ ; ++i) //当全为空格时,字符串最后一个是回车会转化成\0,不会发成溢出 j=0; //新字符串里的下标 while (s[i[!=‘\0‘){ //把s 串copy 到t 串 ,但连续空格只copy一个 if (s[i] == ‘ ‘ &&s[i-1] == ‘ ‘ )//空格前面是否非空 { ++i; continue; } if(s[i++]==‘?‘ ){ t[j++]=‘!‘; continue; } if(s[i] !=‘I‘) t[j++] = tolower(s[i++]) //如果 else t[j++] = s[[i++]; // } t[j] = ‘\0‘ ; //因为之前j++已经加一; cout<< t<< endl; }
emmm总之其实不是很会写,大部分根据其他人的博客然后勉勉强强写了。
后来还提到
string s
跟 getline (cin,s)匹配;
char s[1001] 与 cin.getline()匹配;
标签:注释 编译 第一个 node 一点 com struct 第四章 字符串
原文地址:https://www.cnblogs.com/linyulan/p/10708346.html