В первую строку первого файла переписать слова с четной длиной через пробел, во вторую — с нечетной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Короче говоря, проблема такова: Дан файл со строками, нужно в первую строку первого файла переписать слова с четной длиной через пробел, во вторую - с нечетной. И так для каждой строки. Если в какой - то строке нет слова с четной или нечетной длиной, то такую строку в соответствующем файле оставить пустой. Вот мои наработки алгоритма. Но записывает слишком много мусора. Подскажите, как исправить для нормального решения данной задачи?
char str [ BUFFER ];
        int begin, end, i;
 
        while ( fgets ( str, BUFFER, SourceFile ) )
        {
            begin = 0;
            str [ strlen ( str ) ] = ' ';
 
            while ( str [ begin ] != '\0' )
            {
                end = begin;
                while ( str [ end++ ] != ' ' )
                    ;
                if ( end != strlen ( str ) + 1 )
                {
                    for ( i = begin; i < end - 1; i++ )
                        fputc ( str [ i ], ( ( end - begin ) % 2 != 0 ) ? ( file1 ) : ( file2 ) );
                    fputc ( ' ', ( ( end - begin ) % 2 != 0 ) ? ( file1 ) : ( file2 ) );
                }
                begin = end;
            }
 
            fputc ( '\n', file1 );
            fputc ( '\n', file2 );
        }
Или может есть какой другой способ решения?
Может есть какие идеи?

Решение задачи: «В первую строку первого файла переписать слова с четной длиной через пробел, во вторую — с нечетной»

textual
Листинг программы
#include <stdio.h>
 
#define BUFF_LNG 4096
 
int main(int argc, char* argv[])
{
    FILE *in = fopen( "in.txt", "r" );
    FILE *out = fopen( "out.txt", "w" );
 
    if( !in || !out )
    {
        fclose( in );
        fclose( out );
        return -1;
    }
 
    char str1[BUFF_LNG] = { 0 };
    char str2[BUFF_LNG] = { 0 };
 
    char temp_str[BUFF_LNG];
    char word[ BUFF_LNG ];
 
    while( !feof( in ) )
    {
        fgets( temp_str, BUFF_LNG, in );
 
        char * tk = strtok( temp_str, " ,.;:'\"[]{}|\\/\n" );
 
        while( tk )
        {
            sprintf( word, "%s ", tk );
            strcat( (strlen(word) - 1) & 1 ? str1 : str2, word );
 
            tk = strtok( 0, " ,.;:'\"[]{}()|\\/\n" );
        }
 
        fprintf( out, "str1: %s\nstr2: %s\n", str1, str2 );
 
        str1[0] = str2[0] = 0;
    }
 
    fclose( in );
    fclose( out );
 
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы