Есть програмисты C ?

Кирилл22рф
Скопировать из файла F1 в файл F2 все строки, в которых содержится не менее двух одинаковых слов.


Помогите пожалуйста!

Dark_XXX
эх давно это было....

вот материальчик:
http://www.proklondike.com/boo...rogramming.html

а я старый стал ((( забыыыыл всё напрочь (((((((((((((((

HumbleSnake
С голый? Без ++,#?
xeno
ахахаха, в инете поищи, задача тривиальная донельзя
AAG
Не проверял, т.к. Сишного компилятора под рукой нет. Возможны косяки, но общий алгоритм понятный. Примерно так будет (именно на голом Си, на плюсах можно и красивее сделать):

#include «stdio.h»

#define MAX_SIZE 1024 //пусть максимальная длина строки будет 1024

void main(void)
{
FILE *f1, *f2;
char buf[MAX_SIZE];
f1 = fopen("f1.txt", "r");
if(!f1) //файла нету, завершаем работу проги
return;

f2 = fopen("f2.txt", "w"); //создаем файл, куда писать будем

while(!feof(f1)) //читаем, пока не дошли до конца файла
{
fgets(buf, MAX_SIZE, f1); //копируем строку в буфер (строка - любые символы до знака переноса или до конца файла)

for (int a=0;a«MAX_SIZE;a++)
if(buf[a]=='\r' | | buf[a]=='\n') //ищем символы переноса строки и заменяем их нулем для дальнейшего удобства
{
buf[a]=0;
break;
}
char word1[MAX_SIZE];
int i=0;
int j=0;
for(int k=0; k<MAX_SIZE; k++)
{
while(buf[k]==' ' | | buf[k]=='\t')
k++; //пропускаем пробелы и табуляции
i=0;
while(buf[k]!=' ' && buf[k]!='\t' && buf[k]!=0)
word1[i++]=buf[k++]; //копируем слово в word1
word1[i]=0; //в конце слова поставим ноль, обозначающий его границу

j=k; //новый отсчет начнем с текущей позиции
while(buf[j]!=0)//доходим до конца строки
{
while(buf[j]==' ' | | buf[j]=='\t')//пропускаем пробелы и табуляции, ищем новое слово
j++;
bool equal=true;
i=0;
while(buf[j]!=' ' && buf[j]!='\t' && word1[i]!=0)//
{
if (word1[i]!=buf[j])
{
equal=false;
break;
}
i++;
j++;
}
if (equal && i»0) //символы слов совпали и слова не нулевой длины
{
if ((buf[j]==' ' | | buf[j]=='\t' | | buf[j]==0)) && word[i]==0)//при этом длина слов совпадает (оба слова закончились одновременно)
{
fprintf(f2, "%s\n", buf); //копируем строку в f2
goto A;
}
}
}
//начинаем процедуру заново но уже со вторым словом(третьим, четвертым и т.д.) - идем в начало цикла
}

A: //строка полностью проверена, проверяем дальше строки при их наличии - идем в начало цикла
}

fclose(f1); //закрываем открытые файлы
fclose(f2);
}

AAG
че-то вся табуляция формой отправки сообщения съедена оказалась(
asgs
goto в Си?! Жуткий моветон 😊
А вообще тема для оружейного форума интересная, да) С - наше самое страшное оружие!
AAG
в си единсвенное применение goto - выход из вложенных циклов. т.к. break и continue в данном случае не годятся, а лишнуюю переменную-флаг городить и проверять ее смысла нет.
Кирилл22рф
спасибо