在下面的程序中,我有一个输入.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;
}
感谢您的回复。
答案 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;
}