![]() |
|
Модераторы: bsa |
![]()
|
|
| RA16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 31.3.2016 Репутация: нет Всего: нет |
Прошу помочь составить программу. Нужно прочитать из файла строку символов. Данная строка состоит из нулей, единиц и пробелов. Группы нулей и единиц, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Требуется подсчитать и вывести количество слов в данной строке. Рассматривая слова как числа, определить и вывести количество слов, делящихся на 5 без остатка. Новую строку не создавать. Вывести исходную строку.
У меня получился код, чтобы прочитать из файла строку символов. А какой код должен быть дальше ? #include <iostream> #include <fstream> using namespace std; char* getStringFromFile(const char* filename) throw (char*) { int len; ifstream in(filename, ios::binary | ios::in); if(!in) throw "Не возможно открыть файл"; if(!(len = in.seekg(0, ios::end).tellg())) throw "Пустой файл"; in.seekg(0, ios::beg); char *buffer = new char[len + 1]; in.read(buffer, len); buffer[len] = 0; in.close(); return buffer; } |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Это недоразумение, а не код Используйте std::string и istream& getline (istream& is, string& str); для чтения (если уж у вас С++) Для разборки строки на ваши слова можно использовать регулярки (std::regex и std::regex_search из C++ 11) |
|||
|
||||
| RA16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 31.3.2016 Репутация: нет Всего: нет |
К сожалению, пока на большее не претендую... Изучаю С++ 1-ую неделю. Не могли бы Вы написать, для примера, правильный код для этой задачи от начала до конца. У меня пока получилось только до стадии преобразования слова в число.
#include <iostream> #include <fstream> using namespace std; char* getStringFromFile(const char* filename) throw (char*) { int len; ifstream in(filename, ios::binary | ios::in); if(!in) throw "Не возможно открыть файл"; if(!(len = in.seekg(0, ios::end).tellg())) throw "Пустой файл"; in.seekg(0, ios::beg); char *buffer = new char[len + 1]; in.read(buffer, len); buffer[len] = 0; in.close(); return buffer; } #include <sstream> stringstream sin; sin.str(buffer); // массив слов vector<string> array; // чтение слов for(;;) { string s; sin >> s; if (sin.eof()) break; array.push_back(s); } cout << "Количество слов = " << array.size(); |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Разбиение сделано правильно (даже проще, чем я предлагал).
От начала и до конца - это в центр помощи
Не совсем понятно - числа десятичные или двоичные? Если десятичные и состоящие только из 0 и 1, то делится на 5 будет только в том случае если последний символ в слове '0'. Как то подозрительно просто выглядит |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |