В настоящее время моя C-программа alter.c успешно создает массив символов a из текстовых файлов, вызываемых с помощью аргументов командной строки.
Однако я хочу изменить его так, чтобы вместо чтения в каждой строке он читал только в строках, которые не последовательных повторов предыдущей строки. Если строка повторяется, но не следует за ее идентичной строкой, ее не следует удалять.
Например, скажем, содержимое testfile.txt:
Привет
Привет, там
Привет
Hello.
Если вызывается как 'alter testfile.txt', создается массив символов:
Привет.
Hello.
Вот код, который у меня сейчас есть:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define MAX_NAME_SZ 100
#define caseChange 32
#define MAXCHARS 79
int main (int argc, char *argv[])
{
char ch, *a;
static char changed = 'f';
/* if there is more than one argument */
if (argc > 1)
{
int i = 1, j = 0;
FILE *fp;
while (i < argc)
{
a = malloc (MAX_NAME_SZ * sizeof (char));
j = 0;
fp = fopen (argv[i], "r");
if (fp == NULL)
{
/*Error statement in case an error is encountered /*
fprintf (stderr, "Error encountered for File %s : %s\n",
argv[i], strerror (errno));
return 3; /* I chose to return 3 if an error was encountered */
}
else
{
while (((ch = fgetc (fp)) != EOF) && (j < 99))
{
a[j++] = ch;
}
a[j] = '\0';
fclose (fp);
changeCase (a, changed);
noNums (a, changed);
identLines (a, changed);
spaces (a, changed);
printf ("\n");
}
i++;
}
if (changed == 'f')
return 1;
else
return 0;
}
else
{
a = malloc (MAX_NAME_SZ * sizeof (char));
fgets (a, MAX_NAME_SZ, stdin);
changeCase (a, changed);
noNums (a, changed);
identLines (a, changed);
spaces (a, changed);
printf ("\n");
}
}
Я предполагаю, что мне нужно другое выражение while при выполнении моего
while (((ch = fgetc (fp)) != EOF) && (j < 99))
но я не уверен. Любая помощь приветствуется.