Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь с датой  (Прочитано 18831 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« : 15-04-2009 05:06 » 

надо разкидать по переменным дату, меяц и год.
Код:
date = "14.04.2009";
for (int i =0; i<date.Length(); i++)
{
  //что тут будет???? while? if?

}
help me please  Краснею
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-04-2009 05:35 » 

Код:

const char* p=0;

const char* date = "14.04.2009";

int day=0;
int mon=0;
int year=0;

p=date;

for(;;)
{
day=atoi(p);
p=::strpbrk(p,".");
if(!p)break;
p++;

mon=::atoi(p);
p=::strpbrk(p,".");
if(!p)break;
p++;

year=::atoi(p);

break;
}
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-04-2009 05:38 » 

Алексей, а напомни, нет ли функции разбиения строки на подстроки по опред шаблону, типа split, а то это сущетсвенно упростило бы задачу и код.
На каком языке автору сие необходимо, сразу непонятно фрагмент какого языка он представил С/С++, С#
Записан

ещё один вопрос ...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 15-04-2009 05:44 » 

nikedeforest, есть strtok , но её опасаюсь использовать, так как там используется статическая переменная

Цитата: msdn
function uses a static variable for parsing the string into tokens. If multiple or simultaneous calls are made to the same function, a high potential for data corruption and inaccurate results exists. Therefore, do not attempt to call the same function simultaneously for different strings and be aware of calling one of these functions from within a loop where another routine may be called that uses the same function. However, calling this function simultaneously from multiple threads does not have undesirable effects.

про язык автор молчит, значит это ему не так важно Улыбаюсь  Поэтому я написал на си++
« Последнее редактирование: 15-04-2009 05:46 от Алексей1153++ » Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 15-04-2009 06:04 » 

Прочел, как травы курнул.
Особенно вот так если,
снчала
Цитата
Therefore, do not attempt to call the same function simultaneously for different strings and be aware of calling one of these functions from within a loop where another routine may be called that uses the same function.
и
Цитата
However, calling this function simultaneously from multiple threads does not have undesirable effects.
А как можно одновременно вызывать, но без потоков?
Записан

ещё один вопрос ...
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-04-2009 06:16 » 

извините, про язык: пишу на  C++ Builder, и приложение не консольное.
P.S. но мне иногда нужна только методика нахождения.

и еще, почему for(;Ага именно так???
« Последнее редактирование: 15-04-2009 06:41 от Алексей1153++ » Записан

Улыбаюсь Ага
zubr
Гость
« Ответ #6 : 15-04-2009 06:33 » 

У Borland есть готовая функция:
Код:
void __fastcall DecodeDateTime(const System::TDateTime AValue, Word &AYear, Word &AMonth, Word &ADay, Word &AHour, Word &AMinute, Word &ASecond, Word &AMilliSecond);
1. Из строки "15.04.2009" с помощью функции StrToDate получаем значение TDateTime
2. С помощью функции DecodeDateTime получаем нужные параметры.
« Последнее редактирование: 15-04-2009 06:38 от zubr » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 15-04-2009 06:40 » 

nikedeforest, это цитата, вопросы не ко мне Улыбаюсь

Цитата
function simultaneously for different strings
легко:

Код:
const char p1="dfsgdsfgdg";
const char p2="dfsgdssdfdsfgfgdg";

::strtok(p1,".");
::strtok(p2,".");


и еще, почему for(;Ага именно так???

это для удобства выхода из блока по break, если где то нарушен формат строки
А во-вторых, ты в первом посте сам "заказал" for Ага
« Последнее редактирование: 15-04-2009 06:54 от Алексей1153++ » Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 15-04-2009 06:49 » 


и еще, почему for(;Ага именно так???

это для удобства выхода из блока по break, если где то нарушен формат строки
А во-вторых, ты в первом посте сам "заказал" for Ага
про for что пустой. Ну я тебя понял!
Записан

Улыбаюсь Ага
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 15-04-2009 07:18 » 

Алексей, это все равно не одновременно, а последоваително, пока это один поток Улыбаюсь
Записан

ещё один вопрос ...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 15-04-2009 07:23 » 

nikedeforest, использование strtok такое:

Код:
//начало работы, достаём первый токен
::strtok("строка для парса","символы разделителей")

//продолжение, достаём второй токен
::strtok(0,"символы разделителей")

//продолжение, достаём третий токен
::strtok(0,"символы разделителей")
и так, пока не будет возвёрнут 0.

соответственно, если между вызовами влезть с ещё одной строкой, то получим неверные результаты.
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 15-04-2009 07:34 » 

Алексей1153++, ну так если ты в одном потоке параллельно две строки парсить пытаешься - разумеется, будет ошибка при такой логике.
В случае с многопоточностью с использованием beginthreadex, полагаю, проблем с параллельным обращением не должно быть: если мне память не изменяет, то в каждом потоке будет своя копия статической переменной.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 15-04-2009 07:36 » 

Да, Алексей, теперь понял. Спасибо.
Записан

ещё один вопрос ...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 15-04-2009 07:37 » 

Вад, и всё равно, нет доверия к этой функции у меня Улыбаюсь Рано или поздно стрельнет в клубке функций
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 15-04-2009 09:18 » 

Так концепируй правильно, тогда и не стрельнёт. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 15-04-2009 09:42 » 

Джон , а если рекурсивная функция ? Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 15-04-2009 13:21 » 

Лёш, для любого хорошего алгоритма или ф-ции всегда можно придумать (выдумать) ситуацию, когда он не будет хорошим.
Я не говорю, что везде и всегда нужно использовать ТОЛЬКО strtok. Для своиего предназначения - разбивка ОЧЕНЬ БОЛЬШОГО массива символов для получения элементов, она работает замечательно, ибо не создаёт копии, а просто заменяет разделитель нулём. Со всеми вытекающими отсюда последствиями. Это надо знать и учитывать. А твои страхи просто "децкие".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 16-04-2009 04:15 » 

Джон, а у меня нет страхов, я в таких случаях работаю с CString или с const char* как с массивом , так же на время подменяя байты на нолики Улыбаюсь Мне проще написать свою парсилку, чем рисковать
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 16-04-2009 09:10 » 

Этак можно договориться до того, что проще написать свою ОС, СУБД, язык программирования и т.д. чем "рисковать" Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 16-04-2009 10:14 » 

я в таких случаях работаю с CString

А CString ты не боишься? Ага

Ну, а про своё... В таком случае всё сводится к четырём арифметическим действиям плюс операции сравнения и сдвига. Остальное всё своё. Ага А если серьёзно, то конечно же всегда лучше "своё" использовать, вопрос только в том, кто это "своё" оплачивать будет?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 16-04-2009 10:21 » 

c CString не боюсь Улыбаюсь

Своё оплатит начальство. А вот когда не своё не заработает - то оно будет недовольно Улыбаюсь
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 16-04-2009 10:32 » new

Если ты будешь неправильно/неосторожно использовать не свое, то тогда оно не заработает и тогда конечно начальство долнжо быть недовольно
Записан

ещё один вопрос ...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 16-04-2009 10:44 » 

nikedeforest, Джон, dimka, это всё придирание к словам. Я своё отношение к strtok просто высказал Улыбаюсь Спорить дальше неохота об этом, ибо не о чем тут спорить
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 16-04-2009 11:28 » 

Лёш, проблема в том, что отношение твое беспочвенное, однако преподносится как если бы действительно в этом кроется что-то опасное. Это отрицательно влияет на неокрепшие умы. Ну и по всем законам демократии оппозиция сразу себя проявила. Ага Собственно говоря никто и не спорит - просто высказывают альтернативную точку зрения.

ps вот даже афоризм-каламбур родился: "чужое" - это тоже чьё-нибудь "своё".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines