Проблема с изменением порядка слов в предложении - PullRequest
1 голос
/ 27 марта 2019

Я хочу прочитать inputtext.txt построчно, изменить порядок слов в каждой строке и распечатать их (input: hello world, output: world hello). С этим кодом мой вывод все испорчен, и я получаю ошибку времени выполнения № 2, говорящую, что стек вокруг моего "строки" массива поврежден. Я пытался сбросить строки на нуль после каждой итерации цикла while, но все равно получаю ту же ошибку. Кто-нибудь есть какие-либо предложения, чтобы избавиться от ошибки времени выполнения или помочь коду работать более гладко?

int main() {
    FILE *inp,*outp;        //file input and output
    int i,wordcount;                    //define counter variables
    int k = 0,j=0;
    char string[200];       //define string to scan sentence into
    char words[20][20];     //2D string for each word in the sentence
    inp = fopen("inputtext.txt", "r");
    outp = fopen("output.txt", "w");
    if (inp == NULL) {
        printf("File not found.\n");
    }
    else {
        while (!feof(inp)) {

            fgets(string, 1000, inp);
            printf("GOT SENTENCE\n");
            for (i = 0; string[i] != '\0'; i++) {


                if (string[i] == ' ') {
                    words[k][j] = '\0';
                    k++;
                    j = 0;
                }
                else
                {
                    words[k][j] = string[i];
                    j++;
                }

            }

            words[k][j] = '\0';
            wordcount = k;
            for (i = wordcount; i >= 0; i--) {
                printf("%s ", words[i]);
            }
            printf("\n\n");

        }
    }
    return 0;
}

1 Ответ

0 голосов
/ 27 марта 2019

следующий предложенный код:

  1. без ошибок компилируется
  2. правильно проверяет ошибки
  3. правильно выводит сообщения об ошибках в stderr
  4. выполняеттребуемая функциональность
  5. правильно ограничивает максимальную длину ввода
  6. предполагает, что ни одна строка во входном файле не превышает 199 символов
  7. минимизирует количество раз, которое функция: strlen() называется
  8. фактически записывает перевернутые предложения в выходной файл

А теперь предложенный код:

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


int main() 
{
    FILE *inp,*outp;        //file input and output
    int wordcount;                    //define counter variables
    int k = 0;
    int j = 0;
    char string[200];       //define string to scan sentence into
    char words[20][20];     //2D string for each word in the sentence

    inp = fopen("inputtext.txt", "r");
    if( !inp )
    {
        perror( "fopen to read: inputtext.txt failed" );
        exit( EXIT_FAILURE );
    }

    outp = fopen("output.txt", "w");
    if( !outp )
    {
        perror( "fopen to write: output.txt failed" );
        // cleanup
        fclose( inp );
        exit( EXIT_FAILURE );
    }


    size_t strLength = strlen( string );

    for (size_t i = 0; i < strLength; i++)
    {
        // remove any trailing newline
        string[ strspn( string, "\n" ) ] = '\0';

        printf("GOT SENTENCE\n");

        for (size_t i = 0; i < strlen(string); i++) 
        {
            if (string[i] == ' ') 
            {
                words[k][j] = '\0';
                k++;
                j = 0;
            }

            else
            {
                words[k][j] = string[i];
                j++;
            }
        }

        words[k][j] = '\0';
        wordcount = k;

        for ( int i = wordcount; i >= 0; i--) 
        {
            printf("%s ", words[i]);
            fprintf( outp, "%s ", words[i] );
        }
        printf("\n\n");
        fprintf( outp, "\n" );
    }

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