Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Решено* | Обработка массивов в С++

Ответить
Настройки темы
*Решено* | Обработка массивов в С++

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня возникла такая проблема, есть огромный массив символьного типа (считан из текстового файла, количество элементов может превышать 3млн). Массив представляет из себя вперемешку цифры и буквы (например: пр 126,45 24,5 в а), необходимо вычленнить из массива цифры и свормировать из них новый массив типа Float. Помогите плз, как сократить время на обработку, в идеале избегая рекурсий (очень долго получается), или может кто знает как считать из файла только цифры. Заранее благодарен.

Отправлено: 18:06, 11-10-2005

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Shad0VV
2 вопроса:
1) "пр 126,45 24,5" <- это разве char ? можно точно структуру исходного массива и при выполнении каких действий возникают тормоза
2) где тут можно рекурсии впихнуть ? вижу только 2 вложенных цикла...

Отправлено: 18:58, 11-10-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Shad0VV

PHP код: Выделить весь код

int in;

double r;

for(
00n=1Li++)
{
  if(
'0'<=data[i] && '9'>=data[i])
    
r=(n>1)?(r+((double)data[i]-'0')/n):(r*10+data[i]-'0');
  else if(
','==data[i])
    
*=10;
  else if(
r)
  {
    
cout << << ' ';
    
1;
    
0;
  }
}
if(
r)
  
cout << << ' '

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 23:26, 11-10-2005 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


поправка: while(std::cin) заменить на for(;;)

Последний раз редактировалось Savant, 14-10-2005 в 20:57.


Отправлено: 11:06, 13-10-2005 | #7


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю за помощь. Очень признателен.

Отправлено: 19:59, 15-10-2005 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Решено* | Обработка массивов в С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе 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




 
Переход