В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл - C (СИ)
Формулировка задачи:
Здравствуйте.
Хочу в файле, в каждой фразе(предполагается, что каждая фраза - это набор символов на каждой строке) найти слово наибольшей длинны и записать его в другой файл.
Но вместо этого записывает что-то не понятное.
Вот мои попытки, СИ изучаю только 3 месяца.
Помогите пожалуйста!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"Russian");
int i,count=0,tcount=0,mc,ti,tj;
char buff[100],tempbuff[100];
FILE *f;
FILE *f2;
f = fopen("main.txt","r");
f2 = fopen("new.txt","w");
while(!feof(f))
{
i=0,count=0,tcount=0,mc=0,ti=0,tj=0;
fgets(buff,100,f);
while(buff[i]!='\0')
{
if(buff[i]!=' ') count++;
else
{
if(count>tcount && count > mc){
tj=i;
ti=tj-count;
mc = count;
}
tcount=count;
}
i++;
}
for(i=ti;i<tj;i++) tempbuff[i] = buff[i];
fprintf(f2,"%s",tempbuff);
}
fclose(f);
fclose(f2);
system("pause");
return 0;
}Решение задачи: «В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
static char* max_word(char* s);
void out_max_words(FILE* _out, FILE* _in);
int main(void){
FILE* fin = fopen("input.txt", "r");
FILE* fout = fopen("output.txt", "w");
out_max_words(fout, fin);
fclose(fin);
fclose(fout);
/*
FILE* fp = fopen("input.txt", "r");
out_max_words(stdout, fp);
fclose(fp);
*/
return 0;
}
void out_max_words(FILE* _out, FILE* _in){
char* p, buf[512];
while((p = fgets(buf, sizeof(buf), _in)) != NULL){
p = max_word(p);
if(p != NULL)
fprintf(_out, "%s\n", p);
}
}
//самое длинное слово
static char* max_word(char* s){
int k = 0, n = 0;
char* p = NULL;
do {
if(isalnum(*s) || (*s == '_'))
++k;
else if(k > 0){
if(k > n){
p = s - k;
n = k;
}
k = 0;
}
} while(*s++ != '\0');
if(p != NULL)
*(p + n) = '\0';
return p;
}
Объяснение кода листинга программы
Вывод списка слов наибольшей длины из файла input.txt в файл output.txt:
- Объявлены две функции:
out_max_wordsиmax_word. - В функции
mainоткрывается файлinput.txtдля чтения и файлoutput.txtдля записи. - Функция
out_max_wordsпринимает два аргумента: указатель на файл для записи и указатель на файл для чтения. - В функции
out_max_wordsиспользуется циклwhile, который считывает строку из файла, используя функциюfgets. - Внутри цикла функция
max_wordвызывается для каждого слова в строке, чтобы найти самое длинное слово. - Если самое длинное слово найдено, оно записывается в файл для записи.
- В функции
mainвызывается функцияout_max_wordsс аргументамиfoutиfin. - Файл
finзакрывается, а затем файлfoutзакрывается. - В функции
max_wordиспользуется циклdo, чтобы пройти по каждому символу слова. - Если текущий символ является буквой или подчеркиванием, увеличивается счетчик
k. - Если
kбольше нуля и текущий символ не является буквой или подчеркиванием, уменьшается значениеkна величинуn, и обновляется значениеpиn. - Если
kбольше нуля, значениеkсбрасывается в ноль. - После прохода по всем символам слова, если
pне равноNULL, вpдобавляется нулевой символ. - В функции
mainоткрывается файлinput.txtдля чтения и вызывается функцияout_max_wordsс аргументамиstdoutиfp. - Файл
fpзакрывается. - В функции
mainвозвращается значение 0, что означает успешное выполнение программы.