Wie kann ich ein Programm schreiben, das vertauschen eines Zeichens in den input-Datei mit einem Zeichen auf der Kommandozeile angegeben?

Ich versuche ein Programm zu schreiben, zu tauschen, ein Zeichen, dass ich in der Befehlszeile angeben (ein Kommandozeilen-argument) mit einem Charakter in das input-text-Datei. Die erste Kommandozeilen-argument ist der Charakter, den ich ändern möchte, das zweite argument ist das Zeichen, das möchte ich ersetzen die alten Charakter mit, und das Dritte argument ist die Eingabedatei.

Wenn ich das mache, mein Programm generieren soll eine output-Datei mit dem Namen: "translation.txt". Ich weiß, dass das problem bei meinem Programm ist in der "wenn" - Aussagen/die fprintf-Anweisungen, aber ich bin mir nicht sicher, wie Sie dieses Problem zu beheben. Ich dachte an das Lesen jedes Zeichens in der Eingabe-Datei getrennt, und von dort wollte ich mit "wenn" - Anweisungen, um zu bestimmen, ob oder nicht zu ersetzen, der Charakter.

void replace_character(int arg_list, char *arguments[])
{
   FILE *input, *output;

   input = fopen(arguments[3], "r");
   output = fopen("translation.txt", "w");

   if (input == NULL)
   {
      perror("Error: file cannot be opened\n");
   }

   for (int i = 0; i != EOF; i++)
   {
      if (input[i] == arguments[1])
      {
         fprintf(output, "%c\n", arguments[2]);
      }
      else
      {
         fprintf(output, "%c\n", arguments[1]);
      }
   }
}

int main(int argc, char *argv[])
{
   if (argc < 5)
   {
      perror("Error!\n");
   }

   replace_character(argc, argv);
}
  • Dies sollte nicht kompilieren. Sie können eine Datei nicht indizieren Zeiger struct.
  • Ja, das ist eines der Probleme, die ich habe. 🙁 Ich möchte das vergleichen, jeder Charakter auf meinen Befehl Linie argument, aber ich bin Probleme mit, wie das zu tun.
  • Man weiß eigentlich nicht, wie zu Lesen, die Eingabe in C, tun Sie?
  • Ich bin ziemlich neu bei der Arbeit mit Dateien und so, so weit, alles, was ich gelernt habe, ist das öffnen von Dateien zum Lesen/schreiben, drucken Fehlermeldungen, wenn Dateien geöffnet werden können, und einfache Dinge wie, dass. 🙁
  • mmap, richtig? Scheint, wie die meisten einfach Weg.. wenn Sie es bekommen, um zu arbeiten 🙂 Es ist schwer.. aber wenn es funktioniert, es ist super einfach! man7.org/linux/man-pages/man2/mmap.2.html
  • Ich Tue dies als eine übung für die Klasse und ich glaube nicht, dass wir verwenden können, mmap. 🙁 Aber, gibt es eine Möglichkeit, dies zu tun mit "fgets"? Oder gibt es eine Möglichkeit, Lesen jedes Zeichen einzeln??
  • for (int i = 0; i != EOF; i++) - wie willst du das beenden dieser Schleife? EOF ist -1 auf meiner Maschine, es nie zu beenden.
  • Hmm...würde ich eine "while" - Schleife statt einer for-Schleife? Ich habe gehört, dass es häufiger "while" - Schleifen beim arbeiten mit Dateien. Aber wenn ich mit einer while-Schleife habe ich zum Lesen der input-Datei vor der ersten rechts?
  • Nein, es kann eine while-Schleife ohne Probleme, z.B. so etwas wie while ((c = fgetc(filehandle)) != EOF) - liest ein Zeichen in einer Zeit, ich denke, es könnte in Ihrem Fall.
  • OK, nicht zu abfälligen, aber den Unix-Befehl "tr" wird genau das tun, was Sie wollen, es sei denn, Sie gehen lieber durch die Programmierung. Ein "Mann tr" für details.
  • Ich denke, ich gehe lieber durch die übung, es ist übung für eine bevorstehende Prüfung. 🙂

InformationsquelleAutor Karen | 2013-06-01
Schreibe einen Kommentar