#include <iostream> #include <fstream> #include <string> using namespace std; bool isWordCharacter(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'||EOF);//留给后面判断单词个数用的 } int main(){ // fstream outfile; // outfile.open("Cs.txt",ios::out); // outfile<<"hello\nword"; //先写入一个文件,方便后期的代码测试和调试 // outfile.close(); fstream infile; cout<<"请输入您想检查的文件"<<endl; infile.open("Cs.txt",ios::in); if(infile) cout<<"文件关联成功,请等待计算"<<endl; else cout<<"文件关联失败,请检查您的文件地址或者文件格式是否正确"<<endl; //先判断文件是否被关联,是否可以进行后面的有效访问 int i=0; string line; while(getline(infile,line)){//之前通过遍历整个文件,一直计算的都是0,后面经过在csdn上面查找,发现文件的开头有换行字符,导致一直计算的都是0; ++i; } cout<<"这个文件的行数是"<<i<<endl; //这里我犯了一个错误,在这里本来写了一个infile。close(),但是我后面没有再次关联这个文件导致每次单词个数都读取的是0; infile.clear(); infile.seekg(0, ios::beg); int wordCount = 0; string word; while (infile >> word) { wordCount++; } cout << "这个文件里面有" << wordCount << "个单词" << std::endl; infile.clear(); infile.seekg(0,ios::beg);//再次文件指针归位 std::string repeat; std::string previousWord; int count = 0; while (infile >> repeat) { if (repeat == previousWord) { count++; } else { if (!previousWord.empty()) { std::cout << previousWord << ": " << count << std::endl; } previousWord = repeat; count = 1; } } // 输出最后一个单词的重复次数 if (!previousWord.empty()) { std::cout << previousWord << ": " << count << std::endl; } infile.close();//最后一步再关闭这个文件 return 0; } //最后,版权声明,以上代码由武汉理工大学电气2204班李强松所有,欢迎提出对本代码的优化建议,也可以在csdn上查询“小松爱编程you”使用本代码进行教学或者测试使用