Я работаю над заданием для своего класса c ++, и я довольно близок к решению своей проблемы.На данный момент я получаю вывод, который почти такой же, как я ожидал, поэтому я подозреваю, что, возможно, я неправильно понимаю основную концепцию этой проблемы.Часть моего задания, над которым я сейчас работаю, состоит в том, чтобы получить имя файла от пользователя, прочитать его, а затем отобразить этот файл при замене ключевых символов.Например,:!, Будет заменено на \ n, чтобы создать новую строку.Мне разрешено использовать только iostream и fstream, а весь текст должен обрабатываться массивами символов [].В моем текущем выводе я получаю дополнительный пробел в третьей строке, и я не понимаю, как это получается.Из-за этого, я думаю, у меня может быть неправильная логика в голове, и мне было интересно, могли бы какие-нибудь более опытные программисты объяснить, где я ошибаюсь.Я иду в правильном направлении?
вот текстовый файл, который я использую на практике: 1.txt
Type, type, type away :!
compile.
Run.
Hip hip hooray! :! No errors today! :!
Это ожидаемый вывод того же файла: 1.txt
Type, type, type away
compile. Run. Hip hip hooray!
No errors today!
это вывод, который я получаю
Type, type, type away
compile. Run. Hip hip hooray!
No errors today! <<-------- extra space at the beginning!
Я вставлю свой код ниже, не стесняйтесь критиковать его любым способом.
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 1024 // this is the maximum allowed number of char in a file.
// is it a bad idea to define it as a constant?
int main()
{
char fileName[256];
char data[MAX];
int readFile(char fileName[],char data[]);
void display(char data[], int counter);
fstream file;
cout << "File Name: ";
cin >> fileName;
int counter = readFile(fileName, data);
display(data, counter);
return 0;
}
int readFile(char fileName[], char data[])
{
ifstream file;
file.open(fileName);
int count = 0;
while(file.get(data[count]) && count < MAX)
{
count++;
}
file.close();
return count;
}
void display(char data[], int counter)
{
char formatText(char data[], int count);
for(int i = 0; i < counter; i++)
{
if(data[i] == '\n') // I added this if statment in because the newline
{ // from the file was getting read, AND the :! was
data[i] = '\0'; // becoming \n, printing out TWO new lines!
}
}
for(int i = 0; i < counter; i++)
{
formatText(data, i);
if(data[i] != ':') // All tokens have a : before, So i dont want to
cout << data[i]; // print out the :'s.
}
}
char formatText(char data[], int count)
{
if(data[count] == ':')
{
switch(data[count + 1]) // these are the three tokens I have been given,
{ // but it has to be expandable for more later.
case '!': data[count + 1] = '\n';
break;
case '<': data[count + 1] = '\"';
break;
case '>': data[count + 1] = '\"';
break;
}
}
}
Извините, если на это ответили в другом посте, я не смог найти (или, возможно, понять) ответ на свой вопрос.Спасибо за ваше время и терпение.