Помогите пожалуйста, чёт туплю.
Есть переменная TCHAR x. И там данные, ну например v1.2.3456
Мне нужно извлечь 1.2. И записать в числовую переменную.
Как это сделать?
Здравствуйте, Аноним, Вы писали:
А>Помогите пожалуйста, чёт туплю. А>Есть переменная TCHAR x. И там данные, ну например v1.2.3456 А>Мне нужно извлечь 1.2. И записать в числовую переменную. А>Как это сделать?
А>Пока вывожу вот так: А>
А>cout << x[1] << x[2] << x[3];
А>
int v1,v2,v3;
_stscanf(str,"v%d.%d.%d",&v1,&v2,&v3);
Здравствуйте, Аноним, Вы писали:
А>Есть переменная TCHAR x. И там данные, ну например v1.2.3456
На самом деле, TCHAR x[...] — т.е. массив символов (строка), а не один символ
А>Мне нужно извлечь 1.2. И записать в числовую переменную.
LPCTSTR x = _T("v1.2.3456");
// копируем три символа с известной позиции
TCHAR tmp[4]; _tcsncpy(tmp, x+1, 3); tmp[3]=0;
// устанавливаем сишную локаль (чтобы десятичная точка была именно точкой, а не запятой, как в русской локали)const char* old_locale = setlocale(LC_NUMERIC,NULL);
setlocale(LC_NUMERIC,"C");
// читаем число из строкиdouble n = _ttof(tmp);
// восстанавливаем старую локаль
setlocale(LC_NUMERIC,old_locale);
В принципе, с самого начала в программе установлена локаль Си. Но мало ли, кто-то где-то её переключил.
Здравствуйте, Аноним, Вы писали:
А>Помогите пожалуйста, чёт туплю. А>Есть переменная TCHAR x. И там данные, ну например v1.2.3456 А>Мне нужно извлечь 1.2. И записать в числовую переменную. А>Как это сделать?
К>LPCTSTR x = _T("v1.2.3456");
К>// копируем три символа с известной позиции
К>TCHAR tmp[4]; _tcsncpy(tmp, x+1, 3); tmp[3]=0;
К>// устанавливаем сишную локаль (чтобы десятичная точка была именно точкой, а не запятой, как в русской локали)
К>const char* old_locale = setlocale(LC_NUMERIC,NULL);
К>setlocale(LC_NUMERIC,"C");
К>// читаем число из строки
К>double n = _ttof(tmp);
К>// восстанавливаем старую локаль
К>setlocale(LC_NUMERIC,old_locale);
К>
К>В принципе, с самого начала в программе установлена локаль Си. Но мало ли, кто-то где-то её переключил.
кто-то где-то её переключил... между вызовом setlocale и _ttof (в другом потоке)
Здравствуйте, c-smile, Вы писали:
R>>Еще вариант — регулярные выражения:
CS>Ну ё моё... просили же "нужно извлечь 1.2. И записать в числовую переменную."
Возможно, я чего-то недопонял. Ну допустим даже так, все равно, сначала нужно извлечь, и только потом записать. Так что можно считать, что на часть вопроса я ответил.
С другой стороны, вопрос сформулирован достаточно противоречиво:
Пока вывожу вот так:
cout << x[1] << x[2] << x[3];
Как я полагаю, "запись в числовую переменную" является не самоцелью, а скорее способом ее достижения.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
CS>>Ну ё моё... просили же "нужно извлечь 1.2. И записать в числовую переменную."
R>Возможно, я чего-то недопонял. Ну допустим даже так, все равно, сначала нужно извлечь, и только потом записать. Так что можно считать, что на часть вопроса я ответил.
Ну блин... А зачем "сначала нужно извлечь", а "только потом записать"?
А сразу нельзя извлекая писать? Зачем там по дороге еще аллокации строк?
Здравствуйте, c-smile, Вы писали:
CS>Ну блин... А зачем "сначала нужно извлечь", а "только потом записать"? CS>А сразу нельзя извлекая писать? Зачем там по дороге еще аллокации строк?
Ну хотя бы потому, что саму идею использования переменных вещественных типов в качестве контейнеров для храниения версии лично я не считаю удачной. Ну не собирается же он, в самом деле, выполнять арифметические операции с версией с плавающей точкой!
А насчет лишних аллокаций: избавиться от них — тривиальная задача. Только разговор об этом без данных профайлера я считаю преждевременным.
--
Справедливость выше закона. А человечность выше справедливости.