最近在读洞庭散人的程序《基于K-means文本聚类》,作为C++学习的起航船。发现他的代码无法运行。而且代码中有错误。于是就在此开博更正。
代码
#include
<
iostream
>
#include < vector >
#include < algorithm >
#include < string >
#include < cmath >
#include < locale >
using namespace std;
bool myfunction( string s1, string s2)
{
if (s1.compare(s2))
{
return true ;
}
return false ;
}
string mytolower( string src)
{
locale loc;
string result = "" ;
for (size_t i = 0 ; i < src.length(); ++ i)
{
// cout<<tolower(src[i],loc);
result.append( 1 ,tolower(src[i],loc));
}
return result;
}
int main ()
{
string s1 = " 原地转圈的驴子.TestTest\n " ;
string s2 = " 原地转圈的驴子.TestTest2\n " ;
vector < string > strVec;
vector < string > ::iterator it;
strVec.push_back(s1);
strVec.push_back(s1);
strVec.push_back(s2);
strVec.push_back(s2);
cout << " before transform operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
transform(strVec.begin(),strVec.end(),strVec.begin(),mytolower);
cout << " before unique operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
it = unique(strVec.begin(),strVec.end(),myfunction);
strVec.resize(it - strVec.begin());
cout << " after unique operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
int end;
scanf( " %d " , & end);
return 0 ;
}
#include < vector >
#include < algorithm >
#include < string >
#include < cmath >
#include < locale >
using namespace std;
bool myfunction( string s1, string s2)
{
if (s1.compare(s2))
{
return true ;
}
return false ;
}
string mytolower( string src)
{
locale loc;
string result = "" ;
for (size_t i = 0 ; i < src.length(); ++ i)
{
// cout<<tolower(src[i],loc);
result.append( 1 ,tolower(src[i],loc));
}
return result;
}
int main ()
{
string s1 = " 原地转圈的驴子.TestTest\n " ;
string s2 = " 原地转圈的驴子.TestTest2\n " ;
vector < string > strVec;
vector < string > ::iterator it;
strVec.push_back(s1);
strVec.push_back(s1);
strVec.push_back(s2);
strVec.push_back(s2);
cout << " before transform operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
transform(strVec.begin(),strVec.end(),strVec.begin(),mytolower);
cout << " before unique operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
it = unique(strVec.begin(),strVec.end(),myfunction);
strVec.resize(it - strVec.begin());
cout << " after unique operation " << endl;
for ( int i = 0 ;i < strVec.size();i ++ )
{
cout << strVec[i] << endl;
}
int end;
scanf( " %d " , & end);
return 0 ;
}