怎么会有空格,不是while ( spamFile >> word )明明过滤掉的吗
在上面帖子的程序里,spamFrequencyFile.txt里怎么会有空格呢(就是有些行的最前面)?
while ( spamFile > > word )缺省不是忽略空格、换行符、制表符什么的吗?(很纳闷)
code:
#include "SpamFrequency.h "
map <string, unsigned int> spamFrequencyMap;
int SpamFrequency()
{
ofstream spamFrequencyFile;
//nameSpam里存取垃圾文本文件名
string prefixSpam = "spam ";//垃圾样本名字前缀
string postfixSpam = "c ";//垃圾样本名字后缀
string middleSpam;
string word;
size_t pos;
map <string, unsigned int> tempspamFrequencyMap;
//for循环是为了统计所有的文本文件
for ( int k=1; k <=SPAMMAILNUM; k++)
{
middleSpam = IntToString(k);
string nameSpam = "spam\\ " + prefixSpam + middleSpam + postfixSpam + ".txt ";
ifstream spamFile;
spamFile.open (nameSpam.c_str ());
if ( !spamFile )
{
cerr < < "error: unable to open input spam file!\n ";
return -1;
}
while ( spamFile > > word )
{
pos = word.find_last_of ( '/ ');
if ( pos != string::npos )
{
word = word.substr ( 0, pos );
tempspamFrequencyMap[word]++;
unsigned int count=tempspamFrequencyMap[word];
//只存储token 出现次数超过3个
if ( count> =3)
{
spamFrequencyMap[word] = count;
}
}
}
spamFile.close ();
}
spamFrequencyFile.open ( "spamFrequencyFile.txt ");
if (!spamFrequencyFile )
{
cerr < < "error: unable to open output spam file!\n ";
return -2;
}
typedef map <string, unsigned int> ::iterator typeIter;
for (typeIter it=spamFrequencyMap.begin(); it!=spamFrequencyMap.end(); it++)
{
spamFrequencyFile < < (*it).first < < " " < < (*it).second < <endl;
}
spamFrequencyFile.close ();
return 0;
}
[解决办法]
啥编译器?
VC6没打sp6补丁吧。
[解决办法]
A1不可打印字符,不是空格类字符,C++流当然不会把它过滤掉。
[解决办法]
中文空格不是空格。
[解决办法]
汉字是双字节 ascii是单字节
不是一类东西啊