0

我的任务是编写一个程序,它应该在前面的特定序列之后省略一个单词。我已经准备了一个有效的 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) 满足时,这意味着该单词包含字母序列 I '正在寻找,并且应该省略该特定单词之后的第二个单词。变量“counter”和“yes”可能不是完美的算法,但起初我希望它工作,然后我会尝试简化它。 “计数器”最多计数 2 以确定要省略哪个单词,而“是”有助于在我们移动到不满足if (choose)条件的单词后递增计数器。”

提前致谢!

4

2 回答 2

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!='\\') 

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

于 2012-08-24T13:27:37.717 回答
0

我明白了,代替

/* here it should somehow omit the word */

应该有free(word);

一切都像魅力一样。我早点得到它,但忘记发布我自己的问题的答案:D

于 2012-08-26T15:26:18.690 回答