В первую строку первого файла переписать слова с четной длиной через пробел, во вторую — с нечетной - 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;
}