【问题标题】:returning permutes in a string in C在C中的字符串中返回置换
【发布时间】: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


【解决方案1】:

如前所述 - 你真的应该学习调试你的程序,所以我做到了 - 我错误地在函数 chars(char , char *) 中增加了一个值 a good pointer explanation from other user

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2017-05-30
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2021-09-03
    • 2020-07-20
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多