新手求助!C++,从输入文件中找到指定字符串,并将该字符串后面的内容全部输出。

Node Results
1001 0.00 1157.33 55.61 0.00
1002 0.00 1157.33 53.96 0.00
Link Results
1 2.27 0.01 0.00
6 2.04 0.02 0.00
Node Results
1001 0.00 1157.33 55.61 0.00
1002 0.00 1157.33 53.96 0.00
Link Results
1 2.27 0.01 0.00
6 2.04 0.02 0.00
Node Results
1001 0.00 1157.33 55.61 0.00
1002 0.00 1157.33 53.96 0.00
Link Results
1 2.27 0.01 0.00
6 2.04 0.02 0.00
文档中周期性出现“Node Results”和“Link Results”,将文档中所有“Node Results”后面的内容全部输出,小白新手,非常期待大神的指点!!!!!


 #include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

string findNodeString(FILE* fp)
{
    string outbuf;
    if(!fp)
    {
        return "";
    }
    int state = 0;
    int pos = 0;
    while(1)
    {
        char c = fgetc(fp);
        if(c==-1)
        {
            break;
        }
        switch(state)
        {
            case 0:
                pos = ftell(fp);
                if(c=='N')
                {
                    if(c=='N' && (c=fgetc(fp),c=='o')&&(c=fgetc(fp),c=='d')&&(c=fgetc(fp),c=='e')
                        &&(c=fgetc(fp),c==' ')&&(c=fgetc(fp),c=='R')&&(c=fgetc(fp),c=='e')
                        &&(c=fgetc(fp),c=='s')&&(c=fgetc(fp),c=='u')&&(c=fgetc(fp),c=='l')
                        &&(c=fgetc(fp),c=='t')&&(c=fgetc(fp),c=='s'))
                    {
                        state=1;
                    }
                    else
                    {
                        fseek(fp, pos + 1, SEEK_SET);
                    }
                }
//              else if(c=='L')
//              {
//                  if(c=='L' && (c=fgetc(fp),c=='i')&&(c=fgetc(fp),c=='n')&&(c=fgetc(fp),c=='k')
//                      &&(c=fgetc(fp),c==' ')&&(c=fgetc(fp),c=='R')&&(c=fgetc(fp),c=='e')
//                      &&(c=fgetc(fp),c=='s')&&(c=fgetc(fp),c=='u')&&(c=fgetc(fp),c=='l')
//                      &&(c=fgetc(fp),c=='t')&&(c=fgetc(fp),c=='s'))
//                  {
//                      state=1;
//                  }
//                  else
//                  {
//                         fseek(fp, pos + 1, SEEK_SET);
//                  }
//              }
                break;
            case 1:
                if(c==' ' || c=='\r' || c=='\n' || c=='\t' || (c>='0' && c<='9') || c=='.')
                {
                    outbuf+=c;
                    continue;
                }
                else
                {
                    //输出结果
                    pos = ftell(fp);
                    fseek(fp, -1,SEEK_CUR);
                    return outbuf;
                }
                break;
            default:
                break;

        }
    }
    return "";
}

int main(int argc,char** argv)
{
    FILE *fp = fopen("d:\\test\\test.txt","rb");
    if(fp)
    {
        while(1)
        {
            string str = findNodeString(fp);
            if(str.empty())
            {
                break;
            }
            cout << str << endl;
        }
        fclose(fp);
    }
    else
    {
        cout <<"fopen failed" << endl;
    }
    return 0;
}

thank you.

#include
using namespace std;
int main()
{
FILE *fp;
char s[200];
int flag = 0;
fp = fopen("in.txt", "r");
while(fgets(s, 200, fp) != NULL)
{
if(flag == 0)
{
if(strstr(s, "[ENERGY]")) flag = 1;
}
else if(flag == 1)
{
if(s[0] == '\n') break;
printf("%s",s);
}
}
fclose (fp);
return 0;
}
你不是再百度知道问过答案的吗?

这种匹配,,,正则表达式,首选,,很好匹配,,http://blog.csdn.net/small_mouse0/article/details/54144351(入门篇,可以瞅瞅)

C++感觉忘得差不多了,但是逻辑应该是没问题的。
以指定字符串为分隔符,将内容分割,输入后面部分。
但是如果你的指定字符串存在多个就会出现问题。