returning permutes in a string in C

时间:2018-06-04 16:39:25

标签: c permutation

I need to write a function that returns every permute of a word in a given text file.
For some reason the output is wrong and I don't really understand why.
However, if instead of writing a function that should check a presnce of a letter (as seen below the function chars(char,char*))
I write the needed letters for check manually
it works as intended.

#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;
}

input:
./program text chairs
output: nothing

1 个答案:

答案 0 :(得分:0)

正如所说 - 你应该学习你的程序,所以我做了 - 我错误地增加了函数字符中的值(char,char *) a good pointer explanation from other user