如何用C反转文本文件中的结构?

时间:2014-09-26 15:34:15

标签: reverse

我有一个练习,我不知道如何解决它! 我想编写一个C程序,从用户那里获取学生的信息,然后将其保存到文件A.txt。之后反转名字,姓氏和学号,并将其保存到文件B.txt。

例如: 约翰 洛佩兹 123456

它变为: nhoj zepol 654321

#include <stdio.h>
#include <stdlib.h>
#define SIZE 50

struct student {
    char fname[SIZE];
    char lname[SIZE];
    char num[SIZE];
}st;

int main()
{
    FILE *in, *out;
    char ch;
    int tmp=0,flag=0,i;

    printf("INPUT First name: ");
    scanf("%s", &st.fname);

    printf("INPUT Last name: ");
    scanf("%s", &st.lname);

    printf("INPUT personal num: ");
    scanf("%s", &st.num);

    in= fopen("A.txt", "w");
    fputs(st.fname, in);
    fputs(st.lname, in);
    fputs(st.num, in);
    fclose(in);

    in= fopen("A.txt", "r");
    out=fopen("B.txt", "w");

    fgets(st.fname, strlen(st.fname)+1,in);
    strrev(st.fname);
    fputs(st.fname, out);
    printf("\n%s", st.fname);

    fgets(st.lname, strlen(st.lname)+1, in);
    strrev(st.lname);
    fputs(st.lname, out);
    printf("\n%s", st.lname);

    fgets(st.num, strlen(st.num)+1, in);
    strrev(&st.num);
    fputs(st.num, out);
    printf("\n%d", st.num);

    fclose(in);
    fclose(out);

    return 0;

}

3 个答案:

答案 0 :(得分:1)

如果要将数据复制到文件中,则首先需要将数据放入一些动态内存分配中,然后在反转动态内存中所需的内容后,需要将其复制到文件中。

答案 1 :(得分:1)

这是用于反转给定字符串中每个单词的程序     #包括     #include

void reverse_string(char*);
void reverse_words(char*);

int main() {
char a[100];

gets(a);

reverse_words(a);

printf("%s\n", a);

return 0;
 }

void reverse_words(char *s) {
 char b[100], *t, *z;
 int c = 0;

  t = s;

  while(*t) {                           //processing complete string
   while(*t != ' ' && *t != '\0') {    //extracting word from string
    b[c] = *t;
  t++;
  c++;
 }
 b[c] = '\0';
 c = 0;

 reverse_string(b);        // reverse the extracted word

 z = b;

 while (*z) {    //copying the reversed word into original string
  *s = *z;
  z++;
  s++;
 }

 while (*s == ' ') {                 // skipping space(s)
  s++;
 }
/*
 * You may use if statement in place of while loop if
 * you are assuming only one space between words. If condition is
 * used because null terminator can also occur after a word, in
 * that case we don't want to increment pointer.
 * if (*s == ' ') {
 *   s++;
 * }
 */
 t = s;                              // pointing to next word
  }
  }

 /*
 * Function to reverse a word.
  */

 void reverse_string(char *t) {
 int l, c;
 char *e, s;

  l = strlen(t);
 e = t + l - 1;

  for (c = 0; c < l/2; c++) {
  s  = *t;
  *t = *e;
  *e = s;
  t++;
   e--;
  }
    }

答案 2 :(得分:1)

然后你可以尝试使用fputc,即通过char读取char以及循环来逐行获取数据。

char *ch;
for(i=0;st.fname[i];i++)
{
ch=getc(st.fname[i]);
fputc(ch,in);
}

对st.lname和st.num

重复相同的操作