gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:59:54 24 4
gpt4 key购买 nike

这是作业的一部分,因此说明很明确,我不得使用指定内容以外的任何内容。

这个想法很简单:

1) 创建一个包含字符串和计数的结构数组

2) 计算每个结构中字符串的出现次数并将计数存储在该结构中

3)打印字符串及其出现次数

我被明确告知要使用 fgets 和 strstr 函数

这是我到目前为止所得到的,

#define MAX_STRINGS 50
#define LINE_MAX_CHARS 1000
int main(){
int n = argc - 1;
if (n > MAX_STRINGS) {
n = MAX_STRINGS;
}
Entry entries[MAX_STRINGS];
char **strings = argv+1;
prepare_table(n, strings, entries);
count_occurrences(n, stdin, entries);
print_occurrences(n, entries);
}

void prepare_table (int n, char **strings, Entry *entries) {
// n = number of words to find
// entries = array of Entry structs
for (int i = 0; i < n; i++){
Entry newEntry;
newEntry.string = *(strings + 1);
newEntry.count = 0;
*(entries + i) = newEntry;
}
}

void print_occurrences (int n, Entry *entries) {
for (int i = 0; i < n; i++){
printf("%s: %d\n", (*(entries + i)).string, (*(entries + i)).count);
}
}

void count_occurrences (int n, FILE *file, Entry *entries) {
char *str;
while (fgets(str, LINE_MAX_CHARS, file) != NULL){
for (int i = 0; i < n; i++){ // for each word
char *found;
found = (strstr(str, (*(entries + i)).string)); // search line
if (found != NULL){ // if word found in line
str = found + 1; // move string pointer forward for next iteration
i--; // to look for same word in the rest of the line
(*(entries + i)).count = (*(entries + i)).count + 1; // increment occurrences of word
}
}
}
}

我知道我的prepare_table 和print_occurrences 函数运行良好。但是,问题出在 count_occurrences 函数上。

我得到了一个要运行的测试文件,它只是告诉我没有产生正确的输出。 我实际上无法看到输出来找出问题所在

我是指针新手,所以我希望这对我来说是一个简单的错误。我的程序哪里出了问题?

最佳答案

fgets(char * limit str, int size, FILE *rerestrictstream) 写入 str 处的缓冲区...但是您没有缓冲区str。什么是str?这只是一个指针。它指着什么?垃圾,因为你还没有将其初始化为某些东西。所以它可能有效,也可能无效(编辑:,我的意思是你应该预料到它不会起作用,如果它起作用了,你会感到惊讶,谢谢评论者!)。

您可以通过先分配一些内存来解决这个问题:

char *str = malloc(LINE_MAX_CHARS);
// do your stuff
free(str);
str = NULL;

甚至静态分配:

char str[LINE_MAX_CHARS];

无论如何,这是我能看到的一个问题。你说你没有输出,但你至少可以使用 fprintf(stderr, "") 添加一些调试语句..?

关于使用 fgets 和 strstr 在 C 中计算字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42440526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com