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