简略程序 不知道为什么不顺序执行了
简单程序 不知道为什么不顺序执行了
#include<iostream>
using namespace std;
int main()
{
int kmp(char *, char *);
char Tstring[11];
char Sstring[5];
int num1 = 10,num2 = 4;
// cin>>num1>>num2;
Tstring[0] = num1;
Sstring[0] = num2;
for(int i=1; i<= num1; i++)
cin>>Tstring[i];
for(int i = 1; i<=num2; i++)
cin >> Sstring[i];
cout<<"test"<<endl;
cout<<kmp(Tstring,Sstring);
// your code goes here
return 0;
}
int kmp(char *Tstring, char *Sstring)
{
int next[5];
next[0]=4;
next[1]=0;
next[2]=1;
for(int i=3;i<=next[0];i++)
{ cout<<"test2"<<endl;
if(Sstring[i-1]==Sstring[next[i-1]])
next[i]=next[i-1]+1;
else
next[i]=next[i-1];
}
int i=1, j=1;
while(i <= Sstring[0]&&j <= Tstring[0])
{
if(Sstring[i] == Tstring[j])
{ cout<<"test4"<<endl;
i++;
j++;
}
else
i = next[i];
}
cout<<"test3"<<endl;//为什么不执行这一行,下面的也不执行
if(i > Sstring[0])
return (j-Sstring[0]);
else
return 0;
}
------解决思路----------------------
你上面那个while陷入了死循环
------解决思路----------------------
第一 int kmp(char *, char *); //你把这个声明放在main里是不好的,放在main上面 。
第二 问问题的时候要注明你实现的是什么。
第三 写程序 要先来简单的 上来就Kmp 你的程序有一些不是算法的问题 而是对语言的应用技巧,
Tstring,Sstring这俩个怎么从计算机输入到你程序的实现处理 怎么看 怎么感觉那么不靠谱啊。。。
第四 学会debug 打断点。。。也许会有帮助
第五 你可能对Kmp算法了解不足 ,当你对一个东西不了解的时候,去写代码可能不是一个好的方式,你首先应该在
纸上或者在你脑子里可以过一遍这个算法,之后逐步把实现拆分成一小步,之后再写代码。
第六 如果你是靠直觉把代码写出来 并可以基本跑起来,那么对于程序的正确性一点也不敢保证,这种程序一定程度
对于别人是没有意义的,这个时候你就可以用数学的方法去证明你的程序的正确性,推荐你看看The Science Of Programming
#include<iostream>
using namespace std;
int main()
{
int kmp(char *, char *);
char Tstring[11];
char Sstring[5];
int num1 = 10,num2 = 4;
// cin>>num1>>num2;
Tstring[0] = num1;
Sstring[0] = num2;
for(int i=1; i<= num1; i++)
cin>>Tstring[i];
for(int i = 1; i<=num2; i++)
cin >> Sstring[i];
cout<<"test"<<endl;
cout<<kmp(Tstring,Sstring);
// your code goes here
return 0;
}
int kmp(char *Tstring, char *Sstring)
{
int next[5];
next[0]=4;
next[1]=0;
next[2]=1;
for(int i=3;i<=next[0];i++)
{ cout<<"test2"<<endl;
if(Sstring[i-1]==Sstring[next[i-1]])
next[i]=next[i-1]+1;
else
next[i]=next[i-1];
}
int i=1, j=1;
while(i <= Sstring[0]&&j <= Tstring[0])
{
if(Sstring[i] == Tstring[j])
{ cout<<"test4"<<endl;
i++;
j++;
}
else
i = next[i];
}
cout<<"test3"<<endl;//为什么不执行这一行,下面的也不执行
if(i > Sstring[0])
return (j-Sstring[0]);
else
return 0;
}
------解决思路----------------------
你上面那个while陷入了死循环
------解决思路----------------------
第一 int kmp(char *, char *); //你把这个声明放在main里是不好的,放在main上面 。
第二 问问题的时候要注明你实现的是什么。
第三 写程序 要先来简单的 上来就Kmp 你的程序有一些不是算法的问题 而是对语言的应用技巧,
Tstring,Sstring这俩个怎么从计算机输入到你程序的实现处理 怎么看 怎么感觉那么不靠谱啊。。。
第四 学会debug 打断点。。。也许会有帮助
第五 你可能对Kmp算法了解不足 ,当你对一个东西不了解的时候,去写代码可能不是一个好的方式,你首先应该在
纸上或者在你脑子里可以过一遍这个算法,之后逐步把实现拆分成一小步,之后再写代码。
第六 如果你是靠直觉把代码写出来 并可以基本跑起来,那么对于程序的正确性一点也不敢保证,这种程序一定程度
对于别人是没有意义的,这个时候你就可以用数学的方法去证明你的程序的正确性,推荐你看看The Science Of Programming