使用C+在文本文件中查找单词以提取数据+; 我试图找到用C++和Mac Automator做某一活动的总时间(你不需要知道)。 自动售货机来帮我)。我使用Mac Automator通过“事件摘要”和“新建文本文件”操作输出文本文件。它输出如下所示的文本文件:

使用C+在文本文件中查找单词以提取数据+; 我试图找到用C++和Mac Automator做某一活动的总时间(你不需要知道)。 自动售货机来帮我)。我使用Mac Automator通过“事件摘要”和“新建文本文件”操作输出文本文件。它输出如下所示的文本文件: ,c++,text-files,automator,C++,Text Files,Automator,我现在正在为一些非常琐碎的事情挣扎;我无法在文本文件中准确地找到“时间”和“日期”这两个词。如果我找不到“时间”和“日期”这两个词,我就无法开始处理完成该活动所花费的总时间,或者该活动是否超过了午夜(我有时在ams中工作)。到目前为止,我想我花了四个小时,结果好坏参半。如有任何反馈,将不胜感激 下面的代码是我目前正在使用的代码。我可以在文件的开头找到单词“Time”和“Date”,或者如果单词“Time”或“Date”前面有一个“:”,但是当它位于另一行时,程序会失败: cout <<

我现在正在为一些非常琐碎的事情挣扎;我无法在文本文件中准确地找到“时间”和“日期”这两个词。如果我找不到“时间”和“日期”这两个词,我就无法开始处理完成该活动所花费的总时间,或者该活动是否超过了午夜(我有时在ams中工作)。到目前为止,我想我花了四个小时,结果好坏参半。如有任何反馈,将不胜感激

下面的代码是我目前正在使用的代码。我可以在文件的开头找到单词“Time”和“Date”,或者如果单词“Time”或“Date”前面有一个“:”,但是当它位于另一行时,程序会失败:

cout << "Reading from the file...." << endl;
infile.open("calendar workflow text.txt");
while(infile.getline(buff, BUFFSIZE, ':')){ //reads everything
    cout << buff << endl; // prints everything
    if(strcmp("Time",buff)==0){
        cout<<"Time found in text\n"<<endl;
    }
    else if (strcmp("Date",buff)==0){
        cout<<"Date found in text\n"<<endl;
    }
}
infile.close();
cout<<"Total Time in all events: "<<sumtime<<" hrs"<<endl;
return (0);

cout您需要检查以下几个假设:

  • “时间”总是从第一个字符的位置开始吗?在你看到“时间”之前没有空格或标签
  • 同一行中可以有多个“时间”字吗
  • “时间”前面能出现另一个词吗
  • strcmp(“Time”,buff)
    假设整个字符串“buff”中只有一个单词“Time”。 那不是你想要的。如果假设1为真,您可以简单地

    if strncmp(buff, "Time", 4) == 0 {
          // do something, as you found time
    }
    
    否则,对于一般位置,可以使用strstr(buff,“Time”)
    进行子字符串匹配,其中“Time”可以位于字符串中的任何位置。获得位置后,跳过确切的字符数以获得时间值。提取并执行您的计算


    通常,在解析文件时,您必须为空格/制表符等留出一些空间。否则,代码会变得太脆弱,并且可能会导致测试用例失败,而这些测试用例的偏差非常小。

    使用
    strstrstr
    而不是
    strcmp
    。后者仅适用于精确匹配。对你无效吗?@Jongware谢谢!我试试。@πάνταῥεῖ 抱歉,我可能在不好的上下文中使用了“查找”。我想知道它的位置,而不仅仅是它是否在文本中,这样我就可以使用时间值进行进一步的计算。@JordanStewart如果您已经阅读了链接,它在那里声明:返回找到的子字符串的第一个字符的值位置,如果没有找到这样的子字符串,则返回npos。