C:从命令行

时间:2015-04-23 16:08:22

标签: c

在下面的程序中,我有一个输入.txt文件的随机单词。

Example:
DOOR FLAG APPLE
CAR

我需要创建输出.txt文件,该文件将反转并打印下一行中的每个单词。

Example:
ROOD
GALF
ELPPA
RAC

当我使用命令行参数运行程序时:

program.exe FILEINPUT.TXT FILEOUTPUT.TXT

我得到的输出与输入相同。

以下是该计划:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void form(char **a,char **b,int n,char* (*t)(char *));
char *invert_words(char *);
void form(char **a,char **b,int n,char* (*t)(char *))
{
    int i;
    for(i=0;i<n;i++)
        b[i]=(*t)(a[i]);
}
char *invert_words(char *x)
{
    static char h[25];

    int i=0,d=strlen(x),k=0;
    if(x[d-1]==' ')
    {
        x[d-1]=0;
        d--;
        k=1;
    }
    while(i<d)
    {
        x[i]=h[d-i-1];
        i++;
    }
    if(k)
    {
        x[i]='\n';
        x[i+1]=0;
    }
    return h;
}
int main(int argc,char **argv)
{
    FILE *in=fopen(argv[1],"r");
    char **a,**b;
    int n=sizeof(a)/sizeof(char **);
    a=(char **)malloc(n * sizeof(char *));
    b=(char **)malloc(n * sizeof(char *));
    if(!in)
    {
        printf("error");
        return 1;
    }
    FILE *out=fopen(argv[2],"w");

    char x[25],z;
    int k=1;
    while(k!=EOF)
    {
        k=fscanf(in,"%s",x);
        if(k!=EOF)
        {
            fscanf(in,"%c",&z);
            form(a,b,n,&invert_words);
            fprintf(out,"%s%c",x,z);
        }
    }
    fclose(in);
    fclose(out);
    free(a);
    free(b);
    return 0;
}

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char *invert_words(char *x){
    int i=0, d=strlen(x)-1;

    for(;i<d; ++i, --d){
        //swap
        char tmp = x[i];
        x[i] = x[d];
        x[d] = tmp;
    }
    return x;
}

int main(int argc, char **argv){
    if(argc < 3){
        printf("Usage : %s input_file output_file\n", *argv);
        return -1;
    }

    FILE *in =fopen(argv[1], "r");
    FILE *out=fopen(argv[2], "w");
    if(in == NULL || out == NULL){
        perror("file open");
        return -2;
    }

    char x[25], z = ' ';
    while(EOF != fscanf(in, "%24s%c", x, &z)){
        if(isspace(z)){
            fprintf(out, "%s\n", invert_words(x));
        } else {
            printf("small buffer(char x[25])\n");
            break;
        }
        z = ' ';
    }
    fclose(in);
    fclose(out);
    return 0;
}