【问题标题】:How to omit a single word from a file processed by getword如何从 getword 处理的文件中省略一个单词
【发布时间】:2012-08-24 13:12:25
【问题描述】:

我的任务是编写一个程序,它应该在前面的特定序列之后省略一个单词。 我已经准备了一个有效的 getword 程序(返回 char *),现在我只有在 main 有以下 sn-p 代码的问题,它允许我检测应该在哪里删除这个词。但我不知道如何从 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) 条件的单词后递增计数器。

提前致谢!

【问题讨论】:

    标签: c word


    【解决方案1】:

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

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

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

    【讨论】:

    • 检查都很好,满足我的任务。我只问如何实际省略一个词。您认为 for 循环还不错,但是也不好。我不能在输入文件中省略它,因为我的测试 choose 必须将 *word 作为参数。所以需要从 infile 中读取 word。
    • 我回答了你的问题。见注释行 //we also omit special char.
    • 您实际上是从输入文件中读取了这个词。您只是不记得了,也不要输入输出文件。
    • 我认为变量“counter”和“yes”没有意义。可能是我没接到任务
    • getword 只是读取一个单词,它不执行任何检查它是否是我正在寻找的单词。 main() 进行检查。如果满足 if (choose) 则意味着该单词包含我要查找的字母序列,并且应该省略该特定单词之后的第二个单词。变量“counter”和“yes”可能不是完美的算法,但起初我希望它能够工作,然后我会尝试简化它。 “计数器”最多计数 2 以确定要省略哪个单词,“是”有助于在我们移动到不满足 if (choose) 条件的单词后递增计数器。
    【解决方案2】:

    我明白了,代替

    /* here it should somehow omit the word */

    应该有free(word);

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2017-10-09
      • 2012-07-24
      • 2012-05-07
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多