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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2010, 17:08   #1
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию Нахождение и вывод максимального слова в файле на СИ

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

Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define LEN 999

int main()
{
    char cArray[LEN], slovo[LEN], maxslovo[LEN][LEN]; int j,i,k=0,ravnie=0;
    int length = 0, maxlen = 0;
    FILE *f = fopen("C:\\test.txt", "r");
	if(f == NULL)
	{
		puts("Problems");
		return 0;
	}
    fgets(cArray, LEN, f);
    if (f != NULL)
            for (j=0;j<=LEN;j++)
                  {if ((cArray[j]<='Z' && cArray[j]>='A') || (cArray[j]>='a' && cArray[j]<='z'))
                          {length++; slovo[j]=cArray[j];} 
                          else 
                          {if (length>maxlen) 
                                 {maxlen=length; length=0; for (i=0;i<maxlen;i++) {maxslovo[k][i]=slovo[i];} maxslovo[k][maxlen]='\0';} 
                                        else 
                                        {if (length=maxlen) {length=0; k++; ravnie++; for (i=0;i<=maxlen;i++) {maxslovo[k][i]=slovo[i];} maxslovo[k][maxlen]='\0';}}
                          } 
                  }
    fclose(f);
    printf ("%d\n",maxlen);
    for (k=0;k<=ravnie;k++)
           printf ("%s",maxslovo[k]);
    getch();
    return 0;
}
вот програ работающая с одним словом ..нормально выводит последнее максимальное слово...
Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define LEN 999

int main()
{
    char cArray[LEN], slovo[LEN], maxslovo[LEN]; int j,i;
    int length = 0, maxlen = 0;
    FILE *f = fopen("C:\\test.txt", "r");
	if(f == NULL)
	{
		puts("Problems");
		return 0;
	}
    fgets(cArray, LEN, f);
    if (f != NULL)
        {
            for (j=0;j<=LEN;j++)
                  {if ((cArray[j]<='Z' && cArray[j]>='A') || (cArray[j]>='a' && cArray[j]<='z'))
                          {length++; slovo[j]=cArray[j];} 
                          else {if (length>maxlen) maxlen=length; length=0; for (i=0;i<=maxlen;i++) maxslovo[i]=slovo[i];}}
        }
     
    maxslovo[maxlen]='\0';
    fclose(f);
    printf ("%d\n",maxlen);
    printf ("%s",maxslovo);
    getch();
    return 0;
}
Нужно только на СИ имхо паскаль я уже не помню, а другие не знаю... и еще если у кого есть выложите плз программку по спискам(тут я вообще хз что делать помогите плз)
Задание 2: Написать прогу которая из последовательности целых чисел формирует односвязный список в котором нужно осуществить следующее преобразование: поменять местами соседние элементы списка(первый и второй, третий и четвертый и т.д.) если последним только один элемент то его нужно удалить...
Спасибо огромное все кто сможет помочь(имхо либо завтра сдам, либо отчисление)

Последний раз редактировалось Sultan237; 03.03.2010 в 17:27.
Sultan237 вне форума Ответить с цитированием
Старый 03.03.2010, 20:00   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

блин жаль тебя, а мужчина не должен вызывать жалости

могу помочь тебе написанием на С++ (если поднатужусь, то и на С забракодирую), пиши на мыло
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 03.03.2010, 21:50   #3
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

ну вторую прогу я все таки смог написать...прошу гляньте кто-нибудь первую....как можно изменить...
Sultan237 вне форума Ответить с цитированием
Старый 04.03.2010, 01:21   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
#include<stdio.h>
#include<string.h>

int isLetter(char letter){
    return ((letter<='Z' && letter>='A') || (letter>='a' && letter<='z'));
}

int main()
{
	int i,j;
	int length = 0, maxlen = 0;
	
    char cArray[999]={};
    
    char maxwords[10][30]={};//={}, определим чтобы в массиве не было мусора
  
 
    FILE *f = fopen("text.txt", "r");
	if(f == NULL)
	{
		puts("Problems");
		return 0;
	}
	
//получаем размер файла	
fseek (f, 0, SEEK_END); //переходим в конец
int size=ftell(f)+1; //текущая позиция+1
fseek (f, 0, SEEK_SET); //переходим на начало


fgets(cArray, size, f);

//считаем размер макс. слова
for(i=0;i<size;i++) 					 
	if(isLetter(cArray[i])) 
		length++;
	else
		if (length>maxlen)
		{
		maxlen=length;
		length=0;									
		}
		else length=0; 
		//если не буква и не максимальное, обнуляем length, 
		//иначе счет продолжится

int k=0; //счетчик макс. слов
	
//сохраняем максимальные слова	
for(i=0;i<size;i++)	
	if(isLetter(cArray[i])) 
		length++;
	else if(length==maxlen){
		strncpy (maxwords[k],(cArray+i-length),length);
		//копирование:
		//начало массива + текущая позиция - длина предыдущего слова
		length=0;	
		k++;
	}
	else length=0;
								
								
    fclose(f);
    printf ("%d\n",maxlen);

    //вывод макс. слов
    for(i=0;i<=k;i++)
    printf ("%s\n",maxwords[i]);

    return 0;
}
From Stilet: Попрошу различать языки. Для PHP оформление кода по кнопке <> для остальных языков по кнопке #

Последний раз редактировалось Stilet; 04.03.2010 в 08:44.
Indian вне форума Ответить с цитированием
Старый 05.03.2010, 00:32   #5
Sultan237
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

большое спасибо))я только не могу понять как обьяснить строки
Код:
int isLetter(char letter){
    return ((letter<='Z' && letter>='A') || (letter>='a' && letter<='z'));
}
имхо такое раньше не использовал...если можешь напиши плз...я знаю зачем они и что делают но как правильно обьяснить чтобы ответ засчитали хз...

Последний раз редактировалось Sultan237; 05.03.2010 в 00:44.
Sultan237 вне форума Ответить с цитированием
Старый 05.03.2010, 01:18   #6
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
int isLetter(char letter){
    return ((letter<='Z' && letter>='A') || (letter>='a' && letter<='z'));
}
Функция - описание должно быть ближайшем учебнике по Си.

Если не знаете как правильно объяснить, то лучше вернуть это выражение обратно.
Код:
#include<stdio.h>
#include<string.h>


int main()
{
	int i;
	int length = 0, maxlen = 0;
	
    char cArray[999]={};
    
    char maxwords[10][30]={};//={}, определим чтобы в массиве не было мусора
  
 
    FILE *f = fopen("text.txt", "r");
	if(f == NULL)
	{
		puts("Problems");
		return 0;
	}
	
//получаем размер файла	
fseek (f, 0, SEEK_END); //переходим в конец
int size=ftell(f)+1; //текущая позиция+1
fseek (f, 0, SEEK_SET); //переходим на начало


fgets(cArray, size, f);

//считаем размер макс. слова
for(i=0;i<size;i++) 					 
	if((cArray[i]<='Z' && cArray[i]>='A') || (cArray[i]>='a' && cArray[i]<='z'))
		length++;
	else
		if (length>maxlen)
		{
		maxlen=length;
		length=0;									
		}
		else length=0; 
		//если не буква и не максимальное, обнуляем length, 
		//иначе счет продолжится

int k=0; //счетчик макс. слов
	
//сохраняем максимальные слова	
for(i=0;i<size;i++)	
	if((cArray[i]<='Z' && cArray[i]>='A') || (cArray[i]>='a' && cArray[i]<='z')) 
		length++;
	else if(length==maxlen){
		strncpy (maxwords[k],(cArray+i-length),length);
		//копирование:
		//начало массива + текущая позиция - длина предыдущего слова
		length=0;	
		k++;
	}
	else length=0;
								
								
    fclose(f);
    printf ("%d\n",maxlen);

    //вывод макс. слов
    for(i=0;i<=k;i++)
    printf ("%s\n",maxwords[i]);

    return 0;
}

Последний раз редактировалось Indian; 05.03.2010 в 01:20.
Indian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение максимального потока транспортной сети (где ошибка) d3mon4eg Помощь студентам 4 13.06.2015 15:05
Нахождение самого короткого слова Диезушка Помощь студентам 2 20.10.2009 21:43
Вывод максимального, минимального и среднего значение по Listbox Klim Bassenger Microsoft Office Excel 3 29.06.2009 18:38
нахождение максимального элемента в дереве. Haskell densan Помощь студентам 4 01.06.2009 13:23