poj 水题1936 求指教。给定两个字符串s,t。判断s是否是t的子序列。(t中字符可删减,但顺序不变)
提示编译错误。但是在本人vc上运行正常,求大神指点。本人不胜感激。#include<fstream>#include<iostream>#include<string>#...
提示编译错误。但是在本人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;
} 展开
#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;
} 展开
4个回答
展开全部
it = (find(it ,t.end(),s[i])); //以前没用过这个函数,查了下了解你的想法,你是一个一个逐个对比
但是有个问题存在,那就是。如果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;
}
但是有个问题存在,那就是。如果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就是一个测试系统
它也提供什么编译环境?!
展开全部
string类本来就有一个函数可以找子串的,不必自己写呀。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<fstream>
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询