如何从getword处理的文件中省略单个单词

时间:2012-08-24 13:12:26

标签: c word

我的任务是编写一个程序,该程序应该在前面的特定序列之后省略单个单词。 我已经准备好了一个工作的getword程序(返回char *),现在我只有main的问题,我有以下代码片段,这使我能够检测到我应该删除单词的位置。但我不知道如何从outfile中省略/删除该单词。

int main(int argc, char **argv)
{
    FILE *infile = NULL, *outfile = NULL;
    char *word = NULL;
    int c;
    int yes = 0;
    int counter = 0;

    /* completely irrelevant - opening, writing to files, error messages etc. */
    while (1) {
        c = fgetc(infile);

        word = getword(infile);
        if (counter == 2) {
            counter = 0;
            yes = 0;
                    /* here it should somehow omit the word */
            continue;
        }
        if (choose(word, strlen(word))) {
            fputs(word, outfile);
            counter++;
            yes = 1;
        } else {
            fputs(word, outfile);
            if (yes == 1) {
                counter--;
            }   
        }
        free(word); 
    }
    /* completely irrelevant */
}   

编辑:已添加以澄清

“getword只读一个单词,它不执行任何检查是否是我正在寻找的单词.main()进行检查。当if(choose)满足时,则表示单词包含序列我正在寻找的字母,并且应该省略该特定单词之后的第二个单词。变量“counter”和“yes”可能不是完美的算法,但起初我希望它能够工作,然后我会尝试简化。“计数器”最多计数2以确定要省略哪个单词,而“是”有助于在我们移动到不满足if (choose)条件的单词后递增计数器。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您不应该从outfile中删除该单词。您需要从输入文件中省略它。

word = getword(infile);

我想你在这里得到了你需要省略的词。不是吗? 你可以得到这个单词的长度并进行下一个循环

int len = strlen(word); 
for (int i=0; i<=len; i++) 
   fgetc(infile); //we also omit the special char

从这一刻起,您可以继续

编辑:我认为检查

if(!isalpha(c)) 

不好,因为空格不是字母。 可能是这个变种更好

if (c!='\\') 

在这种情况下,char '\'是一个特殊字符。

答案 1 :(得分:0)

我得到了它,取代了

/* here it should somehow omit the word */

应该有free(word);

一切都像魅力一样。 我之前得到了它,但忘了回答我自己的问题:D