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

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

Восстановить пароль Регистрация
 
Serg351
Сообщений: n/a
25.05.2013, 17:57     Самое короткое слово в файле #1
Добрый вечер, 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*.
Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 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
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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;
}
Yandex
Объявления
26.05.2013, 02:22     Самое короткое слово в файле
Ответ Создать тему
Опции темы

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