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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Serg351
Сообщений: n/a
#1

Самое короткое слово в файле - C++

25.05.2013, 17:57. Просмотров 383. Ответов 4
Метки нет (Все метки)

Добрый вечер, cyberforum!

Такая задача: создать программу, которая будет находить самое короткое слово в файле.
Вроде не сложно. Написал:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
 int main()
 {
         setlocale(0, "rus");           /*Для чтения кириллицы*/
         string buf, slovo;             /*объявляем переменные buf и slovo типа строки*/
         ifstream file("test.txt");     /*Открываем файл*/
         if(!file.is_open())            /*Проверяем файл*/
         {
                 cout<<"Файла нету! Проверьте имя файла или его наличие."<<endl; /*Вывод ошибки*/
                 return 1;
         }
         int min = 50; /*Устанавливаем переменную для сравнения*/
         while(getline(file, buf, ' ')) /*Пока не встретиться пробел считываем текст*/
             if(buf.length()<min) /*Если длина текста до пробела < min(50)*/
             {
                 min = buf.length(); /*Значение min для сравнения равно длине текста*/
                 slovo = buf; /*Слово = тексту до пробела*/
             }
             file.close(); /*Закрываем файл*/
        cout << slovo << "\n"; /*Выводим самое короткое слово*/
        return 0;        
 }


НО. Вместо string преподаватель велел использовать char*. В итоге впал в ступор. Не работают теперь все функции над строками.

Люди добрые, подскажите пожалуйста, как быть, как переписать программу, чтобы вместо string использовали char*.
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 17:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Самое короткое слово в файле (C++):

Найти самое короткое слово в файле F - C++
Найти самое короткое слово в файле F

Найти самое короткое слово в заданном текстовом файле и количество его повторений - C++
Дан код, который выводит самое короткое слово в заданном текстовом файле и считает кол-во повторений этого слова в тексте. Нужно сделать...

Найти в файле самое короткое слово и подсчитать, сколько раз оно используется - C++
Доброго времени суток! ---- Сразу к заданию: Разработать программу, которая читает файл, содержащий текст, определяет, сколько раз...

Поменять местами самое длинное слово и самое короткое слово в тексте - C++
Пусть есть двумерный массив, заполненный символами. Рассматривать его как многострочный текст, слова в котором разделены одним или...

Найдите самое длинное, и самое короткое слово в заданном предложении - C++
Найдите самое длинное и самое короткое слово в заданном предложении.

В заданной строке определить самое длинное и самое короткое слово - C++
Ввести несколько строк,каждая из которых содержит некоторое количество слов.В заданной строке определить самое длинное и самое короткое...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Рыжий Лис
Просто Лис
275 / 222 / 61
Регистрация: 17.05.2012
Сообщений: 930
Записей в блоге: 4
25.05.2013, 19:02 #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
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
 
 int main()
 {
         setlocale(0, "rus");           /*Для чтения кириллицы*/
         char* buf = new char[100];
         char* slovo = new char[100]; /*объявляем переменные buf и slovo типа строки*/
         ifstream file("test.txt");     /*Открываем файл*/
         if(!file.is_open())            /*Проверяем файл*/
         {
                 cout<<"Файла нету! Проверьте имя файла или его наличие."<<endl; /*Вывод ошибки*/
                 return 1;
         }
         const int min = 50; /*Устанавливаем переменную для сравнения*/
         while(getline(file, buf, ' ')) /*Пока не встретиться пробел считываем текст*/
             if(strlen(buf)<min) /*Если длина текста до пробела < min(50)*/
             {
                 min = strlen(buf); /*Значение min для сравнения равно длине текста*/
                 slovo = buf; /*Слово = тексту до пробела*/
             }
             file.close(); /*Закрываем файл*/
        cout << slovo << "\n"; /*Выводим самое короткое слово*/
        delete buf, slovo;
        return 0;        
 }
Serg351
Сообщений: n/a
25.05.2013, 20:28 #3
Непонятно. Нужно использовать fgets или можно getline?
fgets читает сразу весь файл, а getline с char не работает =(
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
26.05.2013, 02:03 #4
В общем случае будет так. Конечно, можно написать свой парсер.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "");
    ifstream text("text.txt");
    if (!text.good()) return -1;
    string word, shortest_word(100, ' ');
 
    while ( text >> word )
        if ( word.size() < shortest_word.size() )
            shortest_word = word;
    cout << "shoretst word is " << shortest_word;
    text.close();
    return 0;
}
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
26.05.2013, 02:22 #5
Цитата Сообщение от Serg351 Посмотреть сообщение
НО. Вместо string преподаватель велел использовать char*.
:/ Однако. Как вариант:
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
#include <iostream>
#include <fstream>
#include <algorithm>
#include <limits>
#include <cstdlib>
#include <cstring>
 
 
int main() {
   static std::size_t const max_line_size = 128;
 
   std::ifstream ifs("text.txt");
   if (!ifs) {
      std::cerr << "Failed to open file 'text.txt'" << std::endl;
      std::exit(EXIT_FAILURE);
   }
 
   std::size_t min = std::numeric_limits<std::size_t>::max();
   char buffer[max_line_size];
   while (ifs.getline(buffer, max_line_size)) {
      min = std::min(min, std::strlen(buffer));
   }
 
   std::cout << min << std::endl;
}
Добавлено через 7 минут
Не всё прочитал) Так:
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
#include <iostream>
#include <fstream>
#include <limits>
#include <cstdlib>
#include <cstring>
 
 
int main() {
   static std::size_t const max_line_size = 128;
 
   std::ifstream ifs("text.txt");
   if (!ifs) {
      std::cerr << "Failed to open file 'text.txt'" << std::endl;
      std::exit(EXIT_FAILURE);
   }
 
   std::size_t min = std::numeric_limits<std::size_t>::max();
   char buffer[max_line_size];
   char word[max_line_size] = "";
   while (ifs.getline(buffer, max_line_size)) {
      std::size_t const length = std::strlen(buffer);
      if (length < min) {
         min = length;
         std::strcpy(word, buffer);
      }
   }
 
   std::cout << word << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 02:22
Привет! Вот еще темы с ответами:

Дан текст из нескольки строк, определить самое длинное и самое короткое слово - C++
Вот задание: Дан текст из нескольки строк, определить самое длинное и самое короткое слово.... Я смог решить тока для одной...

Ввести строку, содержащую несколько слов. Определить самое длинное и самое короткое слово - C++
Здравствуйте, не могли бы мне помочь с кодом. Как его переписать, чтобы программа работала? #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

Напечатать самое длинное и самое короткое слово в строке - C++
Напечатать самое длинное и самое короткое слово в строке в С++

Найти самое короткое и самое длинное слово в строке - C++
Введённый строке найти самое короткое и длинное слово.словом считается последовательность симболов,которое отделено пробелом или знаком...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.05.2013, 02:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru