Разделение и изменение строки из текстового файла в C - PullRequest
0 голосов
/ 08 декабря 2018

В школьном проекте я делаю шифр Цезаря.Требования, которые я должен выполнить, следующие: мне нужно прочитать текст из текстового файла, сохранить его в двумерном массиве строк с максимум 81 символом в строке (80 полезных + '\ 0') и 1000 строк, а затем измените содержимое, чтобы зашифровать или расшифровать его.Что если в одной строке текста из файла у меня более 80 полезных символов?Я думал о том, чтобы заставить его читать таким образом, чтобы каждый пробел, который он читает, преобразовывал его в '\ 0' и изменял строку в массиве, но я не знаю, смогу ли я сделать это с помощью fgets вместо fgetc, как я это делал.

Вот что у меня сейчас есть:

int lerficheiro(char * texto[MAXLINHAS][MAXCARPORLINHA])
{
    char caractere;
    FILE * fp;
    fp = fopen("tudomaiusculas.txt", "r");
    if(fp==NULL)
    {
        printf("Erro ao ler ficheiro.");
        return (-1);
    }
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {
        for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
        {
            caractere = fgetc(fp);
            if(caractere == ' ') caractere = '\0'; break;
            if(caractere == '\n') caractere = '\0'; break;
            if(caractere < 'A' || caractere > 'Z')
            {
                printf("Erro ao ler, o ficheiro não contem as letras todas 
maiusculas");
                return (-1);
            }
            * texto[linha][coluna] = caractere;
        }
    }
}

1 Ответ

0 голосов
/ 08 декабря 2018

Инициализируйте ваш массив до 0 и используйте тот факт, что вы выбираете, сколько байтов вы читаете, используя fgets.Просто проверьте возвращаемое значение fgets, чтобы убедиться, что вы достигли конца файла.
Также обратите внимание, что вам не нужно иметь массив результатов в качестве указателя, поскольку массив уже является указателем (РЕДАКТИРОВАТЬ до зеркала @ user3629249 предложения) РЕДАКТИРОВАТЬ 2: отредактированный код для учета проблемы новой строки.Alo удалил -1, что вызывало 79 строк символов вместо 80

#include <stdio.h>
#include <string.h>

#define MAX_LINES 8000
#define HSIZE 81

int parse_file( FILE * inp_file, char res[MAX_LINES][HSIZE])
{
    int l = 0;
    int len = HSIZE;
    while( fgets( res[l]+(HSIZE-len), len, inp_file ))
    {
        len = HSIZE - strlen( res[l]);
        if( len <= 1)
        {
            l++;
            len = HSIZE;
        }
    }
}

int main()
{
    char parsed_file[MAX_LINES][HSIZE] = {0};

    FILE * inp_file;

    inp_file = fopen( "file_to_parse.txt", "r");
    if( inp_file == NULL)
    {
        printf( "Failed to read input file...\n");
        return 1;
    }

    parse_file( inp_file, parsed_file);

    fclose( inp_file);

    for( int i=0; parsed_file[i][0] != 0; i++)
        printf( "line %04d: %s\n", i+1,parsed_file[i]);

    return 0;
}

Если вы хотите, вы также можете заменить новую строку в вашем parsed_file чем-то вроде этого

char *pos;
while( (pos = strchr( line, '\n'))
    *pos = ' ';

С тестовым файлом:

This is a random file that I'm testing out for the pure randomness of random files.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest thing happened, let me tell you about it....

и выводом

line 0001: This is a random file that I'm testing out for the pure randomness of random fil
line 0002: es.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest 
line 0003: thing happened, let me tell you about it....

Следите за тем, чтобы printf все равно печатал символ новой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...