這個版本為區分大小寫的實現(**可直接通過編譯):
#include
#include
#include
#include
#ifndef foreach
#define foreach(container,it) \
for(typeof((container).begin()) it = (container).begin();it != (container).end();++it)
#endif //foreach
using namespace std;
int main(int argc,char* argv)
ifstream ifs(argv[1]);
if(!ifs)
mapmsi;
string word;
while(ifs >> word)
++msi[word];
ifs.close();
foreach(msi,it)
return 0;
}此版本為第二個版本,不區分大小寫,此版本主要是使用了map的第三個引數,使**很簡潔:
#include
#include
#include
#include
#ifndef foreach
#define foreach(container,it) \
for(typeof((container).begin()) it = (container).begin();it != (container).end();++it)
#endif //foreach
using namespace std;
class cmpstr
};int main(int argc,char* argv)
ifstream ifs(argv[1]);
if(!ifs)
mapmsi;
string word;
while(ifs >> word)
++msi[word];
ifs.close();
foreach(msi,it)
return 0;
}注:這裡面有兩個知識點,
1:map的第三個引數可以是仿函式,仿函式也就是比較器
2:c++實現比較器的方法如下:
如果為乙個類定義了形如:
返回型別 operator()(形參表){}的操作符函式,那麼這個類
所例項化的物件就可以被當做函式使用
#include
using namespace std;
class point
point &operator()( int dx, int dy )
friend ostream& operator<<(ostream& os,const point& p)
private:
int _x, _y;
};
int main()
C 檔案讀(逐行讀 逐單詞讀)
include include include include include using namespace std int main ifile.clear ifile.seekg 0 檔案重定位 while ifile word coutvector iterator it text.begi...
用feof 判斷檔案時出現多讀內容的問題
昨天將自己以前做的電子通訊錄加上了檔案讀寫的功能,是的資料可以關機儲存,開機讀取。在修改的過程中出現了乙個問題就是每次開啟程式時,讀檔案內的內容總是會在最後多讀一串資料,經過上網查詢找到了問題所在。下面我先把我原來寫的錯誤的程式部分貼出 while 0 feof stream 這裡我是先用feof ...
c實現統計字元中單詞的個數,單詞之間用空格分隔開。
今日網上訓練遇到一題,有意義,故記之。題目 輸入一行字元,統計字元中單詞的個數,單詞之間用空格分隔開。解題思路 1 若測出某乙個字元為非空格,且它前乙個字元是空格,則表示 新單詞開始 設一初值為0的num變數,新單詞開始則num累加1。2 判斷前一字元是否為空格?設乙個變數表示即可。如下 1 inc...