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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2010, 19:35   #1
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию В чём ошибка??? (ФАЙЛ)

Условие: создать файл и вывести самое длинное слово и сколько раз оно повторилось.

PHP код:
#include <iostream.h> 
#include <fstream.h> 
#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
#include <stdlib.h> 

void ToFile(); 
char Poisk(); 
void main() 

  
clrscr(); 
  
ToFile(); 
  
cout<<"Otvet:"<<Poisk()<<endl
  
getch(); 

 
void ToFile() 
 { 
 
char a[80]; 
 
ofstream OUT
 
OUT.open("dap.cpp"); 
 if (
OUT.fail() ) 
  { 
  
cout<<"ne otkrilca\n"
  exit(
1); 
  } 
 
cout<<"BBedite tekct\n"
 
gets(a); 
 
OUT<<a<<endl
 
OUT.close( ); 

char Poisk() 

 
char str[80], SLOVO [80]; 
   
int kol=0
   
ifstream IN
   
IN.open("dap.cpp"); 
    if (
IN.fail() ) 
       {
cout<<"fail_ne_otkrilca\n"
       exit (
1); 
       } 
    
unsigned lenght 0
    while ( 
IN >> str
    { 
    { 
        if(
strlen(str) > lenght 
        { 
         
lenght strlen(str); 
         
strcpy(SLOVOstr); 
        } 
    } 
     if (*
str==*SLOVO
      { 
       
kol+=1
      } 

    } 
    
cout<<"kolichestvo="<<kol<<endl
    
IN.close(); 
    return 
SLOVO
слово выводит правильное, а вот количество его в тексте (kol) иногда не правильно, с чем это может быть связано????
Telec вне форума Ответить с цитированием
Старый 11.05.2010, 20:11   #2
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Поставьте проверку:
Код:
if(*str==*SLOVO)
    kol+=1;
Перед копированием:
Код:
strcpy(SLOVO,*str);
Т.е. в начале цикла while.
Indian вне форума Ответить с цитированием
Старый 11.05.2010, 21:34   #3
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию

Не получаеться, оно ошибку выбивает, а если ее исправить то уже ответ совсем левый!
Telec вне форума Ответить с цитированием
Старый 11.05.2010, 21:58   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
while ( IN >> str)  
	{  
	
		if(*str==*SLOVO)
		{
			kol+=1;
		}
	
		if(strlen(str) > lenght )  
		{  
			lenght = strlen(str);  
			strcpy(SLOVO, str);  
		}  
	
	}
Что за ошибка то?

Последний раз редактировалось Indian; 11.05.2010 в 22:00.
Indian вне форума Ответить с цитированием
Старый 11.05.2010, 22:22   #5
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию

PHP код:
strcpy(SLOVO,*str); 
когда так сделать то нужно и в начале str менять.

PHP код:
while ( IN >> str)  
    {  
    
        if(*
str==*SLOVO)
        {
            
kol+=1;
        }
    
        if(
strlen(str) > lenght )  
        {  
            
lenght strlen(str);  
            
strcpy(SLOVOstr);  
        }  
    
    } 
А это безтолку менять тот же ефект.
Telec вне форума Ответить с цитированием
Старый 11.05.2010, 22:26   #6
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию

Код HTML:
if (str[i]==SLOVO[i])
	 {
	  i++;
	  kol+=1;
	 }
можно еще так написать, только я не знаю как правильно с [i] быть.
Telec вне форума Ответить с цитированием
Старый 11.05.2010, 22:30   #7
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
char* Poisk()  
{  
	char* str=new char[80];
	char* SLOVO=new char[80];  
	
   
	ifstream IN;  
	IN.open("dap.cpp");  
	
	if ( IN.fail() )  
	{
		cout<<"fail_ne_otkrilca\n";  
		exit (1);  
	}  
       
    unsigned lenght = 0;  
    
    int kolvo=0;  
    
	while ( IN >> str)  
	{  
	
		if(strcmp(str,SLOVO)==0)
		{
			kolvo+=1;
		}
	
		if(strlen(str) > lenght)  
		{  
			lenght = strlen(str);  
			strcpy(SLOVO, str);  
		}  
	
	}
    
    cout<<"kolichestvo="<<kolvo+1<<endl;  
    IN.close();  
    return SLOVO; 
}
Indian вне форума Ответить с цитированием
Старый 11.05.2010, 22:50   #8
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию

Код:
	while ( IN >> str)  
	{  
	
		if(strcmp(str,SLOVO)==0)
		{
			kolvo+=1;
		}
	
		if(strlen(str) > lenght)  
		{  
			lenght = strlen(str);  
			strcpy(SLOVO, str);  
		}  
	
	}
Я понял в чём прокол, например ввожу asdfgh asdfgh asdfg asdfghj
так оно сначало считает повторение первых двух слов, а потом еще + большее слово. нужно как то обнулять kolvo когда появляеться большее слово.
Telec вне форума Ответить с цитированием
Старый 11.05.2010, 22:56   #9
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
while ( IN >> str)  
	{  
	
		if( strcmp(str,SLOVO)==0 )
		{
			kolvo+=1;
		}
	
		if(strlen(str) > lenght )  
		{  
			if( strcmp(str,SLOVO)!=0 )
				{
					kolvo=0;
				}
			lenght = strlen(str);  
			strcpy(SLOVO, str);  
		}  
	
	}
Indian вне форума Ответить с цитированием
Старый 11.05.2010, 23:08   #10
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию

Ооо уже лучше, но всё равно когда одно большее слово писать то не правильно, мне и этого достаточно, спасибо за помощь!
Telec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DELPHI. В чём ошибка ? FORMIDRON Помощь студентам 3 01.10.2009 15:58
Не понимаю в чём ошибка levandowskiy Общие вопросы C/C++ 3 23.08.2009 12:48
В чём ошибка? Roman Общие вопросы C/C++ 2 24.12.2008 01:42
В чём ошибка??? pasha_1 Общие вопросы C/C++ 11 25.11.2008 01:26