1、分割字符串(strsplit)
函数声明:
参数:
str为待分割的字符串
delim为分隔符的集合,注意:对"abcdeafghbi",如果delim是"abd",则结果是"c","e","fgh","i"
返回值:
被分割后的子字符串向量
定义:
2、求最长递减子序列(FindLDS)
函数声明:
参数:
seq为待求值的序列,可谓任何具有小于运算符 "<" 的类型或类的向量
ipos为开始求值的位置(向量的下标,从0开始)
results为所有最长递减子序列的集合,分别以各元素在原序列中的位置(下标)表示
返回值:
无
定义:
举例:
请下载实例:(win2k + VC6 下通过)
LDS.rar(新)
以前为了应付老师,急忙中弄了一个。现在改进了一些。
以前那个蠢的程序在这里LDS.rar
函数声明:
vector<string> strsplit( const string str, const string delim );
参数:
str为待分割的字符串
delim为分隔符的集合,注意:对"abcdeafghbi",如果delim是"abd",则结果是"c","e","fgh","i"
返回值:
被分割后的子字符串向量
定义:
vector<string> strsplit( const string str, const string delim )
{
int cutAt;
string lstr = str;
vector<string> result;
while( (cutAt = lstr.find_first_of(delim)) != lstr.npos )
{
if(cutAt > 0)
{
result.push_back(lstr.substr(0,cutAt));
}
lstr = lstr.substr(cutAt+1);
}
if(lstr.length() > 0)
{
result.push_back(lstr);
}
return result;
}
{
int cutAt;
string lstr = str;
vector<string> result;
while( (cutAt = lstr.find_first_of(delim)) != lstr.npos )
{
if(cutAt > 0)
{
result.push_back(lstr.substr(0,cutAt));
}
lstr = lstr.substr(cutAt+1);
}
if(lstr.length() > 0)
{
result.push_back(lstr);
}
return result;
}
2、求最长递减子序列(FindLDS)
函数声明:
template<class T>
void FildLDS(const vector<T> seq, const int ipos, vector<vector<int> > &results );
void FildLDS(const vector<T> seq, const int ipos, vector<vector<int> > &results );
参数:
seq为待求值的序列,可谓任何具有小于运算符 "<" 的类型或类的向量
ipos为开始求值的位置(向量的下标,从0开始)
results为所有最长递减子序列的集合,分别以各元素在原序列中的位置(下标)表示
返回值:
无
定义:
template<class T>
void FildLDS( const vector<T> seq, const int ipos, vector< vector<int> > &results )
{
// 不需要初始化?
static vector<int> vcursub;
//---------------
for(int i = ipos; i < seq.size(); i++)
{
if((vcursub.size() <= 0) || seq[i] < seq[ vcursub.back() ] )
{
vcursub.push_back(i);
FildLDS(seq, i+1, results);
}
}
if(results.size() <= 0)
{
results.push_back(vcursub);
}
else if( results.back().size() < vcursub.size())
{
results.clear();
results.push_back(vcursub);
}
else if( results.back().size() == vcursub.size())
{
results.push_back(vcursub);
}
if( !vcursub.empty() )
{
vcursub.pop_back();
}
return ;
}
void FildLDS( const vector<T> seq, const int ipos, vector< vector<int> > &results )
{
// 不需要初始化?
static vector<int> vcursub;
//---------------
for(int i = ipos; i < seq.size(); i++)
{
if((vcursub.size() <= 0) || seq[i] < seq[ vcursub.back() ] )
{
vcursub.push_back(i);
FildLDS(seq, i+1, results);
}
}
if(results.size() <= 0)
{
results.push_back(vcursub);
}
else if( results.back().size() < vcursub.size())
{
results.clear();
results.push_back(vcursub);
}
else if( results.back().size() == vcursub.size())
{
results.push_back(vcursub);
}
if( !vcursub.empty() )
{
vcursub.pop_back();
}
return ;
}
举例:
请下载实例:(win2k + VC6 下通过)
LDS.rar(新)
以前为了应付老师,急忙中弄了一个。现在改进了一些。
以前那个蠢的程序在这里LDS.rar