singlepost

Задача на си – найти предложение, содержащее самое маленькое слово << На главную или назад  

Вводится текст (предложения разделяются точками, слова пробелом или запятой) и записывается в фаил. Необходимо найти предложения содержащее самое маленькое слово и записать его в выходной фаил. созданеи файла, вывод из него все есть. Не могу написать саму функцию нахождения этого предложения. есть вот такой вариант но он не работает (что не так с выделением слов)

void Min_Slovo(char filename[255]){//Наход предложения с минимальным словом
setlocale(LC_ALL, "rus");
FILE *fin;
char buf[255];
int i=0, min=1000, count=0;
char *p1, *p2, minp[1000];
if((fin=fopen(filename,"rt"))!=NULL){//Открываем файл для чтения
while(!feof(fin)){//Цикл, проверяющий концовку файла.
fgets(buf,sizeof(buf)-1,fin);//читаем строку
p1=strtok(buf,".");//выделяем первое предложение.
while(p1!=NULL){
p2=strtok(p1," ,:;");//выделяем первое слово
while (p2!=NULL)
{
//Обработка подстроки, адресуемой указателем p2.
if(strlen(p2) < min)
{
min=strlen(p2);
strcpy(minp,p1);
}
p2 = strtok(NULL," ,:;");
}
p1=strtok(NULL,".");//Обработка подстроки адресуемой указателем p1.
}
}
printf("%s",minp);//Вывод предложения ,которое содержит самое маленькое слово.
}

else printf("%s","Can't open file!!!");
}

если не выделять во внутренеем цикле слова, предложения выделяются. а так выделяется только первое преложение и потом делится на слова.

15 ответов в теме “Задача на си – найти предложение, содержащее самое маленькое слово”

  1. 2
    Юрий Никулкин ответил:

    Я бы сделал так. Нашел бы в тексте наименьшее слово. Потом определил бы начало содержащего его предложения (это первая встречающаяся в сторону начала файла точка или начало файла), затем бы определил конец предложения (это первая встречающаяся в сторону конца файла точка или конец файла). Поместил бы в символьный массив предложение. Началу массива присвоить указатель первый, концу предложения присвоить указатель на конец предложения (массив выделен динамически).

    Коряво, конечно, можно придумать намного лучше и быстрее.

  2. 1
    Юрий Никулкин ответил:

    Коменты вообще-то полезней писать возле обьявления переменной, а не типа <<if((fin=fopen(filename,"rt"))!=NULL){//Открываем файл для чтения>> Тут и дураку понятно, что делается. Кстати, коменты пишутся для сопровождения. Привыкай писать их не для себя, а для других. Не пойму, что за переменная min, которой присваивается в начале 1000?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.