路人路过
2017-08-16 02:16
采纳率: 66.7%
浏览 1.8k

新手求助!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”后面的内容全部输出,小白新手,非常期待大神的指点!!!!!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 枫舞的季节 2017-08-16 05:56
    已采纳
    
     #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.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Tsui丶 2017-08-16 02:22

    #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;
    }
    你不是再百度知道问过答案的吗?

    评论
    解决 无用
    打赏 举报
  • 鼠小 2017-08-16 02:23

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

    评论
    解决 无用
    打赏 举报
  • 罗忠浩 2017-08-16 02:36
    C++感觉忘得差不多了,但是逻辑应该是没问题的。
    以指定字符串为分隔符,将内容分割,输入后面部分。
    但是如果你的指定字符串存在多个就会出现问题。
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题