我正在努力完成作业。我们的想法是获得一个字符串数组和一个文件流。我需要在文件中查找这些字符串,并计算这些字符串的出现次数。
我想我已经完成了基本循环。唯一的问题是,当我在行中找到一个字符串时,我想再次搜索该字符串(如果出现多次),则从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。
建议?
答案 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