ll_abc

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、病毒匹配这个程序主要就在三个函数

第一个比较简单,想方设法把下标01开始,

于是,就用了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()匹配;

posted on 2019-04-14 23:53  ll_abc  阅读(119)  评论(2编辑  收藏  举报