|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Решено* | Обработка массивов в С++ |
|
*Решено* | Обработка массивов в С++
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать У меня возникла такая проблема, есть огромный массив символьного типа (считан из текстового файла, количество элементов может превышать 3млн). Массив представляет из себя вперемешку цифры и буквы (например: пр 126,45 24,5 в а), необходимо вычленнить из массива цифры и свормировать из них новый массив типа Float. Помогите плз, как сократить время на обработку, в идеале избегая рекурсий (очень долго получается), или может кто знает как считать из файла только цифры. Заранее благодарен.
|
|
Отправлено: 18:06, 11-10-2005 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Shad0VV
2 вопроса: 1) "пр 126,45 24,5" <- это разве char ? можно точно структуру исходного массива и при выполнении каких действий возникают тормоза 2) где тут можно рекурсии впихнуть ? вижу только 2 вложенных цикла... |
Отправлено: 18:58, 11-10-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать char *data; OpenDialog1->Execute() ; H=FileOpen(OpenDialog1->FileName, fmOpenRead); L=FileSeek(H,0,2); FileSeek(H,0,0); data=new char[L+1]; memset(data,0,L+1); FileRead(H,data,10); Это фрагмент кода, считывание производится в массив типа char, а 2 вложенных цикла - для определения где цифра а где нет на 64битном атлоне 3000+ выполнялись 2 минуты, потом я вырубил. Я просто не знаю как иначе считать информацию из такого файла, только через *char |
Отправлено: 20:14, 11-10-2005 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать double rez,p1,p2;
char *data; int k,H,L,BR; float a; OpenDialog1->Execute() ; H=FileOpen(OpenDialog1->FileName, fmOpenRead); L=FileSeek(H,0,2); FileSeek(H,0,0); data=new char[L+1]; memset(data,0,L+1); --- FileRead(H,data,L); прошу прощения, 10ку ставил для проверки считывания сразу double |
Отправлено: 20:18, 11-10-2005 | #4 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать |
|
------- Отправлено: 23:26, 11-10-2005 | #5 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать я бы по-другому сделал
// чтение файла std::cin.exceptions(ios::badbit|ios::failbit); std::vector<double> result; try { while(std::cin) { while(!std::isdigit(std::cin.rdbuf()->sgetc())) {} double tmp; std::cin >> tmp; result.push_back(tmp); } } catch(std::ios::failure&) { } // вывод std::copy(result.begin(), result.end(), std::ostream_iterator<double,char>("\n")); |
Отправлено: 11:04, 13-10-2005 | #6 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать поправка: while(std::cin) заменить на for(;;)
|
Последний раз редактировалось Savant, 14-10-2005 в 20:57. Отправлено: 11:06, 13-10-2005 | #7 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Благодарю за помощь. Очень признателен.
|
Отправлено: 19:59, 15-10-2005 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе | yulia_hoi | Программирование и базы данных | 6 | 08-01-2010 14:50 | |
Delphi - [решено] Обработка StringGrid | noname_06 | Программирование и базы данных | 5 | 19-01-2009 16:39 | |
C/C++ - Изменение двухмерных массивов | mrcnn | Программирование и базы данных | 9 | 03-07-2008 17:16 | |
Разное - Поддержка массивов более 2Тб. | neWex | Microsoft Windows 2000/XP | 0 | 25-12-2007 14:13 | |
сравнение двух массивов строк в Си | bool | Программирование и базы данных | 5 | 04-05-2005 17:04 |
|