【发布时间】:2014-09-25 06:04:04
【问题描述】:
我有以下代码,它检查一行。计算一些单词并计算每个单词出现的频率。基本上,我想添加一个计数器,以便对于每个单词(由 getNextWord 获取),它将该单词的数量记录为 struct word_t 中的 wordCount (例如,如果该行是“所有,猫!游泳非常far”,我需要它为所有人记录 0,为猫记录 1,为游泳记录 2,等等)这是我正在处理的功能:
void
func4(line_t * linePtr, int argnum, char * argval[]) {
int getfrequency(line_t* linePtr, char* checkword);
word_t word;
int Size;
int i;
int k=0;
int wordfound[MAX_QUERYLENGTH]; /* 1 if query term matches word in line */
for(i = 1; i < argnum; i++,k++) {
int freq = 0;
int offsetval = 0;
int* offset = &offsetval;
wordfound[i] = 0;
if (wordfound[i] == 1) {
freq = getfrequency(linePtr, argval[i]);
/* this is where I require access to the index */
}
}
}
我的结构在这里定义。请注意,stopIndex 和 startIndex 以字符为单位。我要查找的索引(以单词为单位)将称为 wordCount(如下所列)。
typedef struct word_t {
int startIndex;
int stopIndex;
int wordCount;
int frequency;
char buf[MAX_LINELEN];
int wordSz; /* szie of word*/
} word_t;
仅供参考,我也将函数调用放在这里: 而 (-1 != (line.lineLength = getline((char**) &line.buf, &maxSz, stdin))) { /* 更多代码在这里! */ stage4(&line,argc,argv,&word); }
我曾尝试在调用 getNextWord 之后添加 word.wordCount++,但这不起作用(即使在函数调用所在的 while 循环中初始化为 0 之后)。我也一直在尝试使用 wordPtr->wordCount,但没有得到我想要的。
谢谢。
进一步说明: 我正在使用 argv 为 argval 的命令行参数。这些构成查询词。然后我逐行搜索查询词的文本(stdin)。频率是与查询词匹配的单词在文本的 1 行中出现的频率(例如,如果查询词是“cat hat mat”并且标准输入的第一行是“cat cat cat sat that”,那么cat 的频率为 3)。
我需要的是获取标准输入的每一行并记录与查询词匹配的每个单词的单词编号(wordCount)(匹配是使用 strncasecmp 确定的)。也就是说,如果query是“cat hat mat”,stdin的第一行是“cat cat cat sat mat”,我需要记录第一只猫在wordCount = 0,第二只猫在wordCount = 1,第三只猫在 wordCount = 2 处,而 mat 在 wordCount = 4 处。我只需要一种将这些 wordCounts 中的每一个存储在我的结构中的方法,以供以后访问。
【问题讨论】:
-
您的程序和问题描述有些混乱。您阅读了
stdin中的行,但也查看了论点。您是否只需要作为参数传递的单词的单词频率?您可能想阐明您的程序如何与示例调用、行输入和预期输出一起工作。它还有助于获取您已定义的各种类型的定义。 -
您好,感谢您的反馈!我将编辑帖子并评论正在发生的事情。
-
至于索引:我认为您可以在调用
getNextWord的循环中保留一个位置计数并重新定义wordfound的含义:如果单词是,则将其设为-1 '未找到,如果找到则为索引。 -
文体旁注:请不要在使用它们的函数内部声明外部函数。它在 C 中是允许的,但它使代码难以阅读。将它们放在源代码的顶部(或者更好的是,放在标头中)以清晰地分离实现和接口。
-
@MOehm 感谢您对风格的帮助。我一定会在完成后清理它(只是为了避免现在让自己感到困惑),并且下次会记住这一点。我还进行了编辑以澄清我的问题。更改 wordfound(如果未找到单词,则为 -1)会如何影响这一点,抱歉?我在调用 getNextWord 时确实有 word.wordCount++,但它不起作用(它返回的是地址而不是计数)
标签: c function pointers struct