【发布时间】:2018-06-04 16:39:24
【问题描述】:
我需要编写一个函数来返回给定文本文件中单词的每个排列。
由于某种原因,输出错误,我真的不明白为什么。
但是,如果不是编写一个应该检查字母是否存在的函数(如下所示的函数 chars(char,char*))
我手动写了检查所需的字母
它按预期工作。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 100
void permute(FILE *fp, char *perm){
int c,i,perm_size=0;
int flag,chars(char,char *);
char permute[MAX];
i=0;
while(perm[i++])
perm_size++;
flag=0;
i=0;
while(!feof(fp)){
c=fgetc(fp);
if(chars(c,perm)==0){/*a function that checks c with each one of the permutes chars*/
flag++;
permute[i++]=c;
if (flag == perm_size){/*if the permute is the word's length*/
permute[i]='\0';
printf("%s\n",permute);
flag=0;
i=0;
permute[0]='\0';
}
}
else{
flag=0;
i=0;
}
}
}
int chars(char ch, char *str){
while(*str++)
{
if(ch==*str)
return 0;
}
return 1;
}
#include "func.h"
#include <string.h>
int main(int argc,char **argv){
FILE *fp;
char *input,*perm;
char *prog=argv[0];
void permute(FILE *, char *);
if(argc==1)
{
fprintf(stderr,"%s error: no arguments\n",prog);
exit(1);
}
input=argv[1];
perm=argv[2];
if(!(fp=fopen(input,"r")))
{
fprintf(stderr,"%s error: cannot open file\n",prog);
exit(1);
}
permute(fp,perm);
fclose(fp);
return 0;
}
输入:
./program text 椅子
输出:
什么都没有
【问题讨论】:
-
输入是什么?预期的输出?实际输出?另外,请阅读
while(!feof(file))错误的原因:stackoverflow.com/questions/5431941/… -
@ChristianGibbons 我添加了一个输入和一个输出
-
@milo:根据您的程序,
text是包含一些单词的文件的名称。您不认为该文件的 contents 与您的问题描述相关吗?但是您最好尝试自己调试此问题,因为您可以轻松获得所需的所有信息。作为参考,您可能需要阅读 Eric Lippert 的文章 How to debug small programs -
正如 Eric 所建议的,调试程序和编写可调试程序的关键是将您的问题分解成小的、独立的部分,每个部分都有明确定义的接口。您似乎出于某种原因避免使用标准库函数。也许您需要实现自己的。如果是这样,将它们实现为函数;不要只在需要它们的任何地方内联它们。这样你就可以独立地测试它们。如果你这样做了,你会发现你对
fgets的实现有一个严重的缺陷。 -
@ChristianGibbons: 正文只包含几个单词chair的排列,感谢链接我会自己尝试做的
标签: c permutation