使用fgets和strstr在C中查找和计算字符串

时间:2017-02-26 22:56:44

标签: c string

我正在努力完成作业。我们的想法是获得一个字符串数组和一个文件流。我需要在文件中查找这些字符串,并计算这些字符串的出现次数。

我想我已经完成了基本循环。唯一的问题是,当我在行中找到一个字符串时,我想再次搜索该字符串(如果出现多次),则从1 +开始找到字符串的位置开始。

function checkInventoryUrl(url, size, code) { 
  var inventoryData = {}; 
  ....
  .... 
  inventoryData.url = url; // parses html, takes a few seconds to return value 
  inventoryData.name = getProductName(html); 
  var p0 = inventoryData.price = getPrice(html); // returns promise 
  var p1 = getProductQty(html, size); 
  var p2 = getProductMaxOrder(html, size);
  var p3 = getProductSize(html, size);

  Promise.all([p0, p1, p2, p3,])
    .then(function(values){
    // Called when all promises passed in resolve
    });
}

另一个问题是我无法测试我的代码。我刚刚给出了一个运行的测试程序,并告诉我我的代码是否产生了正确的输出。

我需要使用fgets和strstr。

建议?

2 个答案:

答案 0 :(得分:1)

strstr(str, strings[i])返回指向字符串中位置的指针。您应该能够递增该指针(str++)并将其直接传递回循环中的strstr(),每次递增计数,如果strstr()返回NULL则完成循环或str命中空字符。

看起来应该是这样的。我没有测试过这个;但由于这是你的功课,如果它不能正常工作/编译,我会留给你调试。这意味着我不会为你做所有工作......

- )

void count_occurrences (int n, FILE *file, char **strings) {
  char str[LINE_MAX_CHARS];
  int count = 0;

  while (fgets(str, LINE_MAX_CHARS, file) !=  NULL){
    for (int i = 0; i < n; i++){
      char *pos = str;

      while(((pos = strstr(pos, strings[i]) != NULL) && *pos != '\n') {
        count++;
        pos++;
      }
    }
  }
}

答案 1 :(得分:0)

要计算当前行中b的每次出现次数,您必须使用循环,并且必须让strings[i]在最后一次出现后至少从一个位置开始。请参阅以下代码:

strstr