| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Парсинг строк |
| Автор: RA16 31.3.2016, 20:41 |
| Прошу помочь составить программу. Нужно прочитать из файла строку символов. Данная строка состоит из нулей, единиц и пробелов. Группы нулей и единиц, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Требуется подсчитать и вывести количество слов в данной строке. Рассматривая слова как числа, определить и вывести количество слов, делящихся на 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 1.4.2016, 11:26 |
Это недоразумение, а не код Используйте std::string и istream& getline (istream& is, string& str); для чтения (если уж у вас С++) Для разборки строки на ваши слова можно использовать регулярки (std::regex и std::regex_search из C++ 11) |
| Автор: RA16 1.4.2016, 12:53 |
| К сожалению, пока на большее не претендую... Изучаю С++ 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(); |