Форум программистов, компьютерный форум CyberForum.ru

Файлы - C++

Восстановить пароль Регистрация
 
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
08.05.2010, 20:21     Файлы #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
 
void ToFile();
 
void main()
{
 
  ToFile();
  Poisk();
}
 void ToFile()
 {
 char a[80];
 ofstream OUT;
 OUT.open("dap.CPP");
 if (OUT.fail() )
  {
  cout<<"ne otkrilca\n";
  exit(1);
  }
 cout<<"BBedite tekct\n";
 do
  {
  cin.getline(a,80);
  OUT<<a<<endl;
  }
 while(getch() !='0');
 OUT.close();
}
Вот эта программа создает файл, а как найти сомое длинное слово в этом файле????
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
09.05.2010, 01:16     Файлы #2
Пусть слово - это набор букв идущих подряд
находим самое длинное слово в строке, если есть два слова одинаковой длины, то берем первое найденое(поиск слева-направо)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
 
char * Poisk()
{
    ifstream in("dap.сpp");
    if(!in)//не отрылся
        exit(-1);
 
    char str[80], word[80], maxword[80], *p, *temp;
 
    in.getline(str,80);
 
    p = str;
    unsigned length = 0;
 
    while(*p)
    {
        if(isalpha(*p))
        {
            temp = word;
 
            do{ 
                *temp++ = *p++; //Получаем слово
            }while(isalpha(*p));
 
            *temp = '\0';
 
            if(strlen(word) > length) // Если новое слово длинее
            {
                length = strlen(word);
                strcpy(maxword, word);
            }
        }
        ++p;
    }
    in.close();
    return maxword;
}
 
void main()
{
    printf("%s", Poisk());
    _getch();
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
09.05.2010, 01:46     Файлы #3
Owen04, ты сам то понимаешь, что говоришь?
Если программа сама создает файл и пишет туда введенный пользователем текст, то на кой искать самое длинное слово в файле, если можно искать его сразу в веденном тексте, а потом уже сохранять текст в файл (если это вообще требуется).

Может нужно открывать существующий файл и в нем искать самое длинное слово?
Psixodelik
 Аватар для Psixodelik
38 / 37 / 2
Регистрация: 27.11.2009
Сообщений: 93
09.05.2010, 09:48     Файлы #4
как написать так пока не знаю Но предложение такое...у тебя же слова записываются в char....так дели слово пока остаток не будет 0....а результат в отдельную переменную...и для второго слова введи вторую переменную и записывай туда(что бы было что с чем сравнивать))) )....и так со всеми словами....а потом выводишь максимальное слово.
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
10.05.2010, 14:49  [ТС]     Файлы #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
[b]
У меня изначально было задание найти самое длинное слово в файле, а потом уже препод сказал мне, что нужно еще его самому создать.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
 
void ToFile();
char *Poisk();
void main()
{
  clrscr();
  ToFile();
  cout<<Poisk();
  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.close( );
}
char * Poisk()
{
 char a[80], word[80], maxword[80], *p, *temp;
 
   ifstream IN;
   IN.open("dap.cpp");
    if (IN.fail() )
       {cout<<"fail_ne_otkrilca\n";
       exit (1);
       }
    p = a;
    int length = 0;
 
    while(*p)
    {
    if(isalpha(*p))
    {
        temp = word;
 
        do{
        *temp++ = *p++;
        }while(isalpha(*p));
 
        *temp = '\0';
 
        if(strlen(word) > length)
        {
        length = strlen(word);
        strcpy(maxword, word);
        }
    }
    ++p;
    }
    IN.close();
    cout<<maxword;
    return maxword;
}
У меня тут почему то левый ответ выбивает, что не так???

И что такое isalpha????
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
10.05.2010, 15:36     Файлы #6
У меня тут почему то левый ответ выбивает, что не так???
Что у тебя в файле находится, ты ведь в него ничего не записывашь

И что такое isalpha????
это функция возвращает true если аргумент является буквой
есть такие же isalnum() - буквы и цифры
и isdigit() - только цифры есть и другие покопайся в хелпе
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
10.05.2010, 17:28  [ТС]     Файлы #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.close( );
}
А это что тогда??? тут я и ввоже текст

Добавлено через 3 минуты
Тут что ошибка???
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
10.05.2010, 17:40     Файлы #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
// и в функции Поиск соответственно необходимо проводить чтение строки из файла
 OUT.close( );
}
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
10.05.2010, 17:56  [ТС]     Файлы #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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( );
}
C этим я понял ошибку, а что в функции поиска???

Тоесть нужно
C++
1
 IN>>b;// и так дальше
Добавлено через 7 минут
Щас просто выводит первое слово!
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
10.05.2010, 18:19     Файлы #10
Да. и функцию поиска можно проще переписать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char * Poisk()
{
    ifstream in("dap.txt");
    if(!in)//не отрылся
        exit(-1);
 
    char str[80], maxword[80];
 
    unsigned length = 0;
    while ( in >> str)
    {
        if(strlen(str) > length) // Если новое слово длинее
        {
            length = strlen(str);
            strcpy(maxword, str);
        }
    }    
    cout << maxword << endl;
    in.close();
    return maxword;
}
Щас просто выводит первое слово!
так и должно быть
C++
1
IN>>b
читает набор символов пока не встретит разделитель (например: пробел; таб; \n) т.е. не всю строку, а только первое "слово"
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
10.05.2010, 18:40  [ТС]     Файлы #11
А как сделать что бы всё перебрало??? через while??

Добавлено через 4 минуты
Ой, протупил, не заметил, кстатие большее спасибо, буду теперь делать вторую часть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2010, 18:41     Файлы
Еще ссылки по теме:

файлы в С C++
C++ Зачем нужно добавлять файлы в файлы исходного кода
C++ Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
10.05.2010, 18:41     Файлы #12
Посмотри 10й post
Yandex
Объявления
10.05.2010, 18:41     Файлы
Ответ Создать тему
Опции темы

Текущее время: 12:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru