我有以下代碼,它檢查一行。統計一些單詞並計算每個單詞出現的頻率。基本上,我想添加一個計數器,以便對於每個單詞(由getNextWord獲取),它將在struct word_t中將該單詞的數量記錄爲wordCount(例如,如果該行是「all,cats!very very遠」,我需要它來記錄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((字符**)& line.buf,& maxSz,標準輸入))) { /*更多代碼在這裏! */ stage4(& line,argc,argv,& word); }
我試圖在getNextWord調用後添加word.wordCount ++,但是這並不起作用(甚至在函數調用的while循環中初始化爲0之後)。我也一直試圖使用wordPtr-> wordCount,但沒有得到我想要的。
謝謝。
進一步說明: 我正在採取命令行參數,其中argv是argval。這些構成查詢條款。然後,我逐行搜索文本(標準輸入)查詢條件。頻率是與查詢詞相匹配的詞出現在文本的一行中的頻率(例如,如果查詢詞是「貓帽子墊子」並且標準輸入的第一行是「貓貓貓坐的那個」,那麼貓的頻率將是3)。
我需要的是獲取標準輸入的每一行,併爲匹配查詢項的每個單詞記錄單詞編號(wordCount)(匹配使用strncasecmp確定)。也就是說,如果查詢是「貓帽墊」,並且stdin的第一行是「貓貓貓坐席」,我需要記錄第一個貓在wordCount = 0,第二個貓在wordCount = 1,第三隻貓在wordCount = 2,mat在wordCount = 4。我只需要一種方法將這些wordCounts中的每一個存儲在我的結構中,以供以後訪問。
你程序和問題描述有些混亂。你從'stdin'中讀取行,但也看看參數。你是否需要單詞的頻率只是作爲參數傳遞的單詞?您可能想要澄清您的程序如何與示例調用,行輸入和預期輸出結合使用。這也有助於獲得您定義的各種類型的定義。 – 2014-09-25 06:35:44
嘿,感謝您的反饋!我將編輯帖子,並會對發生的事情發表評論。 – KittiCat 2014-09-25 06:36:46
至於索引:我認爲你可以在循環中保持一個位置,在這個循環中你調用'getNextWord'並重新定義'wordfound'的含義:如果找不到該單詞,並且索引if它被找到了。 – 2014-09-25 06:37:59