Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг строк 
:(
    Опции темы
RA16
Дата 31.3.2016, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
} 
PM MAIL   Вверх
xvr
Дата 1.4.2016, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(RA16 @  31.3.2016,  20:41 Найти цитируемый пост)
У меня получился код, чтобы прочитать из файла строку символов.

Это недоразумение, а не код  smile 
Используйте std::string и istream& getline (istream& is, string& str); для чтения (если уж у вас С++)

Для разборки строки на ваши слова можно использовать регулярки (std::regex и std::regex_search из C++ 11)

PM MAIL   Вверх
RA16
Дата 1.4.2016, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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();

PM MAIL   Вверх
xvr
Дата 1.4.2016, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Разбиение сделано правильно (даже проще, чем я предлагал).

Цитата(RA16 @  1.4.2016,  12:53 Найти цитируемый пост)
 Не могли бы Вы написать, для примера, правильный код для этой задачи от начала до конца.

От начала и до конца - это в центр помощи  smile Могу правильно написать то, что вы уже сделали:
Код

#include <iostream> 
#include <fstream>
#include <sstream>

using namespace std;

int main(int argc, char** argv)
{
  string s,input_line;
  vector<string> words;

  ifstream in(argv[1], ios::in);
  getline(in,input_line);
  stringstream sin(input_line);
  while(sin >> s) words.push_back(s);

...
}


Цитата(RA16 @  31.3.2016,  20:41 Найти цитируемый пост)
Рассматривая слова как числа, определить и вывести количество слов, делящихся на 5 без остатка.

Не совсем понятно - числа десятичные или двоичные? Если десятичные и состоящие только из 0 и 1, то делится на 5 будет только в том случае если последний символ в слове '0'. Как то подозрительно просто выглядит


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.