poj 水题1936 求指教。给定两个字符串s,t。判断s是不是是t的子序列。(t中字符可删减,但顺序不变)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 水题1936 求指教。给定两个字符串s,t。判断s是不是是t的子序列。(t中字符可删减,但顺序不变)相关的知识,希望对你有一定的参考价值。
提示编译错误。但是在本人vc上运行正常,求大神指点。本人不胜感激。
#include<fstream>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool IsSubstring(string s,string t)
char * it;
int i;
int x=s.length();
it=t.begin();
for (i=0; i <x;i++)
it = (find(it ,t.end(),s[i]));
if (it ==t.end())
return false;
return true;
int main(int argc,char **argv)
// fstream cin(argv[1]);
string s,t;
while (cin>>s>>t)
if (IsSubstring(s,t))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
// cin.close();
return 0;
但是有个问题存在,那就是。如果s>t
如下情况,程序也会输出yes xihaa xiha
而题意s 是t的子列
我印象中还有find的其他方法,但是我知道一个更直接的一个函数strstr()
#include<fstream>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool IsSubstring(string s,string t)
return strstr(t.c_str(),s.c_str());
int main(int argc,char **argv)
// fstream cin(argv[1]);
string s,t;
while (cin>>s>>t)
if (IsSubstring(s,t))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
// cin.close();
return 0;
追问
其实算法不是什么滴,我只是想问下,为什么在本机上运行正常,但是在oj上运行就提示编译错误了?
追答你的程序在我的VC下面也可以编译运行,但是运行结果是不符合要求。
你说的OJ是说你运行结果错误,还是你说的编译通不过?坦白说,我一直以为OJ就是一个测试系统
它也提供什么编译环境?!
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool IsSubstring(string s,string t)
int it;
int i;
int x=s.length();
it=0;
for (i=0; i <x;i++)
it = t.find(s[i],it);
if (it ==string::npos)
return false;
it++;
return true;
int main(int argc,char **argv)
// fstream cin(argv[1]);
string s,t;
while (cin>>s>>t)
if (IsSubstring(s,t))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
// cin.close();
return 0;
参考技术C sd
以上是关于poj 水题1936 求指教。给定两个字符串s,t。判断s是不是是t的子序列。(t中字符可删减,但顺序不变)的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 2159 - Ancient Cipher = 水题