读书人

C++读取文件有关问题

发布时间: 2012-05-13 16:39:43 作者: rapoo

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;} 

读书人网 >C++

热点推荐