C++读取文件问题
C++读取一个txt文件,并删除所有包含“C++”字符串的行,好久没写C++了,求助~
[解决办法]
- C/C++ code
#define MAXLINE 255int main(){ FILE *fpread, *fpwrite; char line[MAXLINE]; enum{C,CPLUS,CPLUSPLUS,NEWLINE,NONE} state; state = NONE; bool flag = false; //是否包含c++串 int i = 0; char ch; fpread = fopen("c:\\1.txt","r"); if(fpread == NULL){ perror("open error"); return 0; } fpwrite = fopen("c:\\1.out.txt","w"); if(NULL == fpwrite) { perror("write error"); return 0; } while( (ch = getc(fpread))!= EOF ) { if(!flag) line[i++] = ch; switch(ch){ case 'c': case 'C': if(state == NONE || state ==NEWLINE){ state = C; } break; case '+': if(state == CPLUSPLUS) //c++子串后为'+'字符,则不是c++串 state = NONE; if(state == CPLUS) state = CPLUSPLUS; if(state == C) state = CPLUS; break; case '\n': if(state == CPLUSPLUS) flag = true; //c++子串后为换行则包含c++串 if(flag == false) { fwrite(line,sizeof(char), i, fpwrite); } state = NEWLINE; flag = false; //新行,初始化 i = 0; break; default: if(state == CPLUSPLUS) flag = true; //c++子串后为其他任意字符则包含c++串 state = NONE; } } if(!flag && state != CPLUSPLUS) { line[i++] = EOF; fwrite(line,sizeof(char), i, fpwrite); } fclose(fpwrite); fclose(fpread);}
[解决办法]
- C/C++ code
#include <string>#include <iostream>using namespace std;int main(){ string line; while (getline(cin, line)) { if(line.find("c++")==string::npos && line.find("C++")==string::npos) cout << line << endl; } return 0;}