我的任务是编写一个程序,该程序应该在前面的特定序列之后省略单个单词。
我已经准备好了一个工作的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)
条件的单词后递增计数器。
提前致谢!
答案 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