Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод куска строки string в число, типа double. 
:(
    Опции темы
maxi91m
  Дата 18.3.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

Репутация: нет
Всего: нет



Нужна функция которая переводит кусок строки типа string, начиная с какого то числового символа до первого не числового в тип double.
 smile  
--------------------
PM MAIL ICQ   Вверх
azesmcar
Дата 18.3.2010, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Код

double data;
std::stringstream stream(string.substr(x, y));
stream >> data;

Код

double data = boost::lexical_cast<double>(string.substr(x, y));


PM   Вверх
maxi91m
Дата 22.3.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

Репутация: нет
Всего: нет



А если я не знаю где первый не числовой символ? 
Может это можно как осуществить через Convert::ToDuble
 smile 

Это сообщение отредактировал(а) maxi91m - 22.3.2010, 23:25
--------------------
PM MAIL ICQ   Вверх
bsa
Дата 23.3.2010, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



maxi91m, воспользуйся strspn() и strcspn() для нахождения начала и конца числа.

Добавлено через 1 минуту и 29 секунд
Или string::find_first_of() и string::find_first_not_of()
PM   Вверх
Dov
Дата 23.3.2010, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: нет
Всего: 88



Код
cout << strtod(strpbrk("qwerty987456asdfghjk", "0123456789"), NULL) << endl;



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
ИванМ
Дата 23.3.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



Цитата(maxi91m @  22.3.2010,  23:11 Найти цитируемый пост)
Convert::ToDuble

Это не под .NET часом (Managed C++)?
PM MAIL   Вверх
bsa
Дата 23.3.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



maxi91m, ты опять разделом ошибся? Сколько уже можно? Почему сразу не понял, что тот язык, которым ты пользуешься НЕ ЯВЛЯЕТСЯ С++?!?
PM   Вверх
mrbrooks
Дата 24.3.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Код

string str = "195,195195195 it is double";
Match val = Regex.Match(str,@"\d+\D\d+");
double res = 0.0;
Console.WriteLine(double.TryParse(val.Value, out res)? res.ToString() : "fuck side!");

PM MAIL   Вверх
A5uKa
Дата 24.3.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Нет в вас романтики ...

using System.Console;
using System.Linq;

Код

module Program
{
  Main() : void
  {
    mutable tempres : float; def XD="195,195195195 it is double".Split(' ').Select(part => (if (float.TryParse(part, System.Globalization.NumberStyles.Float,null, out tempres)) tempres else (0 :> float))).ToArray().Where(y=>(0 :> float)!=y).ToArray()[0] :> double; Write(XD); _ = ReadLine();
  }
}

PM   Вверх
mrbrooks
Дата 25.3.2010, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Отчего же нет - есть - но прикручивать LINQ ко всему подряд не считаю кошерным занятием. Особенно с разбором всех значений коллекции smile 
если бы строка была такой:
Цитата

"195,195195195 it is double. I do not take drugs. Ololo trololo olololo trololo. Olololololo trolooo."


сколько будет сделано лишних операций? а если после числа будет идти к примеру точка или восклицательный знак? ты никогда не получишь числа без дополнительных махинаций  smile 

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

Код

            string str = "1952,3654454 it is double and this too 666,6666666!!!!";
            double res = 0.0;
            Regex.Matches(str, @"\d+\D\d+")
                .Cast<Match>()
                .Where(e => double.TryParse(e.Value,out res))
                .Select(e => res)
                .ToList()
                .ForEach(e => Console.WriteLine(e));

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.