以下转自:http://bbs.csdn.net/topics/110120343
#include "iostream"
#include <string>
#include <fstream>
using namespace std;
int CountSubString(string const& str, string const& substr)
{
int nCount = 0;
string::size_type substrSize = substr.size();
string::size_type idxSub = str.find(substr, 0);
//int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
while (idxSub!=string::npos) {
++nCount;
++idxSub;
idxSub = str.find(substr, idxSub);
}
return nCount;
}
int CountStrInFile(string const& filename, string const& str)
{
ifstream inf(filename.c_str());
// c_str():生成一个const char*指针,指向以空字符终止的数组。
//ifstream filename("d:\\test.txt");//以输入方式打开文件
if (!inf) {
cout<<"Error: can't open the file: "<<filename<<endl;
exit(1);
}
string infStr;
int nSubStrFound = 0;
while (inf && !inf.eof()){
inf>>infStr;
nSubStrFound += CountSubString(infStr, str);
}
return nSubStrFound;
}
int main()
{
string filename("d:\\test.txt"); // the file name to search string
string strToCount("abc"); // the string to count
int nCount = CountStrInFile(filename, strToCount);
cout<<nCount<<" times of \""<<strToCount<<"\" found in file: "<<filename<<endl;
strToCount = "aaa";
nCount = CountStrInFile(filename, strToCount);
cout<<nCount<<" times of \""<<strToCount<<"\" found in file: "<<filename<<endl;
system("pause");
return 0;
}
//测试文件test.txt内容:
abc abc abc lpte yejylyyryryljryjrabc
logyy[yuuujabcabc
aaaaaa aabeee aaa
//测试输出:
6 times of "abc" found in file: d:\temp\test.txt
5 times of "aaa" found in file: d:\temp\test.txt