不要理解将字符串从文件反转到另一个文件

时间:2014-07-14 04:51:00

标签: c

void stringReverse(char *s) {

char temp;

int i = 0;

int j = strlen(s) - 1;

while (i >= j)
{
    temp = s[i];
    s[i] = s[j]; //swap the characters
    s[j] = temp;
    i++;
    j--;

}

} 

这是函数stringReverse(char *s),其中我必须调用

下面的main函数
int main(int argc, char *argv[])
{
    FILE *in; /* file handle for input */
    FILE *out; /* file handle for output */
    char word[256]; /* char array to store words from input file */

    /* read words from input file, print on separate lines to output file*/
    while ( fscanf(in, " %s", word) != EOF )
    {
        out = stringReverse(char *word);
        fprintf(out, "%s\n", word);
    }

    /* close input and output files */
    fclose(in);
    fclose(out);

    return (EXIT_SUCCESS);
}

我很难理解我应该如何调用stringReverse函数。我的计划是从文本文件中反转一个单词,并将其反向放在另一个空文件

3 个答案:

答案 0 :(得分:0)

好的。我阅读了所有评论,但我没有足够的声誉来评论。所以我添加一个答案。

您的标签上写着不理解反转字符串。有两种方法可以反转字符串。

第一种方式:

输入:你好,你好吗
输出:你是如何嗨

第二种方式

输入:你好,你好吗
输出:uoy era woh iH

您的最终陈述表明您要撤消文件。

int main(int argc, char *argv[])
{
   long loc;
   FILE *in, *out;
   char ch;

   if(argc != 3) {
       printf("Usage: revcopy <source> <destination>.\n");
       exit(1);
   }

   if((in = fopen(argv[1], "rb")) == NULL) {
      printf("Cannot open input file.\n");
      exit(1);
   }

  if((out = fopen(argv[2], "wb"))==NULL) {
     printf("Cannot open output file.\n");
     exit(1);
   }

  /* find end of source file */
  fseek(in, 0L, SEEK_END);
  loc = ftell(in);

 /* copy file in reverse order */
 loc = loc-1; /* back up past end-of-file mark */

 while(loc >= 0L) {
    fseek(in, loc, SEEK_SET);
    ch = fgetc(in);
    fputc(ch, out);
    loc--;
}
  fclose(in);
  fclose(out);

  return 0;
}

上面的代码会给你第一种答案[“你是多么喜欢”] .. 如果你想进一步反转,你必须使用 stringReverseFunction

[我假设 s 是一个单词,它是一个实际参数, i 指向单词的开头, j 指向结尾这个词。然后它会工作正常]

答案 1 :(得分:0)

您可以使用fgets将整个文件存储在字符串中,然后对其执行反向逻辑。

链接到 - &gt; fgets

来自this Link

的strrev

类似这样的事情

#include <stdio.h>

#include <string.h>


char *strrev(char *str)
{
/* u can define your own logic here*/
  char *p1, *p2;

  if (! str || ! *str)
        return str;
  for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
  {
        *p1 ^= *p2;
        *p2 ^= *p1;
        *p1 ^= *p2;
  }
  return str;
}

int main()
{
   FILE *myFile;
   char myTmpString [100];
char myInvertedString [110];
   myFile = fopen ("input.txt" , "r");
   if (myFile == NULL) 
       perror ("An Error Occured");
   else {
     fgets (myTmpString , 100 , myFile);
    *myInvertedString =  strrev (myTmpString);

     puts (myTmpString);
     fclose (myFile);
   }
   return 0;
}

答案 2 :(得分:0)

  1. 首先,您没有opened您想要阅读和写入的文件:

    in = fopen("path_to_input_file", "r");
    out = fopen("path_to_output_file", "w");
    
  2. 然后,您的stringReverse函数的返回类型显示为void。为什么要指定它返回out?那是错的。

  3. 您的stringReverse函数将反转字符串到位。因此,一旦在word上调用该函数,变量的内容就会反转。

  4. 休息似乎没问题。