Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 23:43   #1
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
Вопрос Файлы/Нахождение макс. слова на СИ

Здраствуйте! Перейду к делу...По условию задачи в файле надо найти максимально длинное слово и вывести его на печать...если таких несколько вывести все...разделителями считать все кроме латиницы(именно из латиницы по условию и состоят слова)
Код:
#include "stdafx.h"
#include <stdio.h>
#include <errno.h>

int _tmain(int argc, _TCHAR* argv[])
{
    int i=0,dlina=0,maxdlina=0;
    char maxslovo[30]={},c;
    FILE *f;
    f = fopen("C:\\test.txt", "r");
	if(f == NULL)
	{
		perror("I can not open a file on reading");
        return 1;
	}
    while (!feof(f))
    {
        c = fgetc(f);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z'))
        dlina++;
        else
        {
            if (dlina>maxdlina)
            {
                maxdlina=dlina;
                dlina=0;
            }
            else 
                dlina=0;
        }
    }
    while (!feof(f))
    {
        c = fgetc(f);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z'))
        {
            dlina++; 
            maxslovo[i++]=c; 
        }
        else
        {
            if (dlina==maxdlina)
            {
                maxslovo[i]='\0';
                dlina=0;
                i=0;
            }
            else 
            {
                maxslovo[i]='\0';
                printf ("%s\n",maxslovo[i]);
                dlina=0; 
                i=0;
            }
        }
    }
    printf ("%d\n",maxdlina);
	return 0;
}
он выводит на печать кол-во слов, но не выводит сами слова вот цикл в котором как я полагаю ошибка
Код:
    while (!feof(f))
    {
        c = fgetc(f);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z'))
        {
            dlina++; 
            maxslovo[i++]=c; 
        }
        else
        {
            if (dlina==maxdlina)
            {
                maxslovo[i]='\0';
                dlina=0;
                i=0;
            }
            else 
            {
                maxslovo[i]='\0';
                printf ("%s\n",maxslovo[i]);
                dlina=0; 
                i=0;
            }
        }
    }
Помогите плз, дайте совет в чем может быть проблема...
Sultan237 вне форума Ответить с цитированием
Старый 08.03.2010, 09:12   #2
Bonez92
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 29
По умолчанию

Хотелось бы сказать, что если программа найдет слово больше 30 символов, то она выйдет за выделеный участок памяти для хранения слова. А это плоха премета . Может затронуть другие переменные и программа будет ввести себя непредсказуемо.

Советую поступить следующим образом:
1. С помощью одного цикла "while (!feof(f))" найти длину самого длинного слова, а также сколько таких слов.
2. Выделить память для этих слов, а также для указателей на соответсвующие слова в файле (чтобы запомнить, где начинаются эти слова).
3. С помощью другого цикла "while (!feof(f))" найти и запомнить указатели на эти слова. Если все указатели найдены - то выйти из цикла.
4. По указателям вывести слова (с помощью puts(). Посимвольно, без перехода на следующую строку. Если слово напечатано - переход на следующую строку).

Не забудьте добавить проверку на наличии слов, освободить все динамически-выделенные массивы, закрыть файл.
Bonez92 вне форума Ответить с цитированием
Старый 08.03.2010, 10:12   #3
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

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

Последний раз редактировалось Sultan237; 08.03.2010 в 10:43.
Sultan237 вне форума Ответить с цитированием
Старый 08.03.2010, 10:36   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Исправил. Главное - после первого while нужно передвинуть указатель в начало файла, иначе второй while даже не выполняется. Ну и по мелочи...
Код:
#include "stdafx.h"
#include <stdio.h>
#include <errno.h>

int _tmain(int argc, _TCHAR* argv[])
{
    int i=0,dlina=0,maxdlina=0;
    char maxslovo[30]={},c;
    FILE *f;
    f = fopen("C:\\test.txt", "r");
	if(f == NULL)
	{
		perror("I can not open a file on reading");
        return 1;
	}
    while (!feof(f))
    {
        c = fgetc(f);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z'))
        dlina++;
        else
        {
            if (dlina>maxdlina)
            {
                maxdlina=dlina;
                dlina=0;
            }
            else 
                dlina=0;
        }
    }
	fseek(f,0,SEEK_SET);
    while (!feof(f))
    {
        c = fgetc(f);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z'))
        {
            dlina++; 
            maxslovo[i++]=c; 
        }
        else
        {
            if (dlina==maxdlina)
            {
                maxslovo[i]='\0';
                printf ("%s\n",maxslovo);
                dlina=0;
                i=0;
            }
            else 
            {
                maxslovo[i]='\0';
                dlina=0; 
                i=0;
            }
        }
    }
    printf ("%d\n",maxdlina);
	return 0;
}
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 08.03.2010, 11:43   #5
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

точно..забыл совсем про это...уже ведь 2 дня голову ломаю..спасибо большое...
Sultan237 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение и вывод максимального слова в файле на СИ Sultan237 Помощь студентам 5 05.03.2010 01:18
Нахождение самого короткого слова Диезушка Помощь студентам 2 20.10.2009 21:43
Нахождение Мин И Макс элементов Массива не стандартным способом. gree Помощь студентам 5 17.06.2009 20:57
работа с массивами в С++ (нахождение мин и макс числа) Lorden Помощь студентам 10 29.01.2009 21:42