Как выгоднее преобразовать int в string?

 

Здравствуйте.
Кого с ужЕ Наступившим, кого с Наступающим!

Проконсультируйте, плз.

Имеем результат вычисления int arrInteger[]. Каждый элемент надо его укоротить по количеству знаков и получить string arrString[]. Функции явного преобразования int --> string нет.
Какой вариант экономичнее, целесообразнее, грамотнее в коце концов?

1.

arrString[i] = 100 + arrInteger[i]
arrString[i] = StringSubstr(arrString[i], 2)

2.

arrString[i] = StringSubstr(DoubleToStr(arrInteger[i], 0), 1)
Массив может быть до 100 элементов и с поступлением тика обновляться.
 

Пока ещё с наступающим!:)

Проще всего выполнить простое целевое преобразование типа:

int init()
   {
   int i = 3;
   string s;
 
   s = i;
   Alert ("s = ", s);
 
   return;
   }

Посмотрите приведение типов здесь https://book.mql4.com/ru/basics/expressions .

 
SK. писал (а):

Пока ещё с наступающим!:)
...

Сенкс. Взаимно.

Я понял так, что по первому варианту? Ведь во втором int будет неявно приведен к double, а лишь потОм к string с обрезанием.

Благодарю за Новогодний подарок в виде Учебник по MQL4. Я уже вкратце познакомился по ссылке из головы форума. Будем пользоваться виз плежа. Мне бы его месяцем раньше :) Много вопросов бы с ходу снялось.

Хелпа, как всегда не хватает :) Хотя, надо отдать должное составителям - один из достойных представителей манов, тем более, интегрированных с продуктом.

 
Хорошо бы, чтобы он в голове офсайта где-нибудь лежал, или хотя бы в разделе Документация
 
Chen:
SK. писал (а):

Пока ещё с наступающим!:)
...

Сенкс. Взаимно.

Я понял так, что по первому варианту? Ведь во втором int будет неявно приведен к double, а лишь потОм к string с обрезанием.

Благодарю за Новогодний подарок в виде Учебник по MQL4. Мне бы его месяцем раньше :) Много вопросов бы с ходу снялось. Хелпа, как всегда не хватает. Хотя, надо отдать должное составителям - один из достойных представителей манов, тем более, интегрированных с продуктом.

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

А что такое "манов"? (извините, я слабоват в сленге:)

 

Ман = мануал = manual
Да видели наверное или слышали - "иди кури ман(ы)", "мана(ы) покурил - полегчало" и т.п. RTFM-то дольше писАть :) Да и не всегда M является F. Конечно, когда пытаемый сабж интуитивен, а все таки что-то непонятно, в лом лезть в книгу, пусть и хорошую.

Купил я тут маме на юбилей телефончик. Я все проклял, читая инструкцию. Хорошо у меня раньше мотики были (пальцы еще помнили). Пальцами разобрался, а книга меня расстроила аж до напивания пивом с горя :(( Хоть бы английский был (оригинальный вариант). Так нет. Только полуграмотный косноязычный русский. За что переводчики и техредакторы деньги получили?...

 
Сергей (я не ошибаюсь?), так Вы так и не ответили - первый вариант или второй? Я в своих выводах не сделал ошибки? Ведь напрямую
arrString(i) = StringSubstr(arrInteger(i), 2)

 нельзя. StringSubstr() требует наличия именно строки в своем первом аргументе.

2007.12.31 15:32:04 asbo EURUSD,H1: the first parameter for StringSubstr function must be a string

Ну вот. Мне всего 20 минут осталось до 2008-го.

Всех с Новым Годом!

 

Для того, чтобы присвоить интовое значение стринговой переменной, ничего не нужно. Достаточно просто присвоить.

А что написано в Ваших примерах, не очень понятно. Слева от знака равенства указано обращение к функции. Если это оператор присваивания, то так вообще делать нельзя - обращение к функции нельзя указывать слева от знака равенства. Если это условие, используемое в операторе if, то неправильно указана операция сравнения (нужно было бы ==). Если это фрагмент условия из заголовка оператора цикла,..

Одним словом, чтобы ответить, необходимо смотреть больший фрагмент кода программы.

(в этом году - всё, пошёл к столу:)

 
SK. 31.12.2007 22:16

А что написано в Ваших примерах, не очень понятно.  ...

Ой, млин... Виноват. Исправлюсь. Скоро. К Новому Году :) Я на VB/VBA в основном. Вместо квадратных круглые скобки поставил. Это массивы, млин! Поправил на квадратные. Прощенья просим.

Это нужно для того, чтобы получить индекс файла с двумя цифрами. Типа: file_01.txt ... file_99.txt. Для корректной сортировки. В VB есть функция для форматирования числа в требуемом виде и преобразования в строку. А здесь приходится изворачиваться.

Ну к 1 прибавляем 100. Получаем 101. У строки "101" обрезаем первый знак. Получаем "01". И погнали до 99, пока не переполнится массив. Собственно это только для первой десятки нужно... Имо, изящнее, чем через проверки. Тем более, что шансов перепрыгнуть десятку мало. Или через which будет экономичнее? 

В случае с индексами может и which будет экономичнее. Этоя для простоты привел пример. В реальном коде мне часть элементов массива нужно получить обрезанными до двух цифр, часть такими, как они есть. Вот код. Я потерял к сожалению ссылку, у кого я срисовал. Найду обязательно и поблагодарю.

void fGetGMT()
{
   int    TimeArray[4];
   
   GetSystemTime(TimeArray);
//---- parse date and time from array
   saGMT[0] = TimeArray[0] & 0x0000FFFF;        // YY
   saGMT[1] = 100 + TimeArray[0] >> 16;         // MM
   saGMT[2] = 100 + TimeArray[1] >> 16;         // DD
   saGMT[3] = 100 + TimeArray[2] & 0x0000FFFF;  // hh
   saGMT[4] = 100 + TimeArray[2] >> 16;         // mm
   saGMT[5] = 100 + TimeArray[3] & 0x0000FFFF;  // ss
   saGMT[6] = 1000 + TimeArray[3] >> 16;        // msec
 
   saGMT[0] = StringSubstr(saGMT[0], 2);  // YY
   saGMT[1] = StringSubstr(saGMT[1], 1);  // MM
   saGMT[2] = StringSubstr(saGMT[2], 1);  // DD
   saGMT[3] = StringSubstr(saGMT[3], 1);  // hh
   saGMT[4] = StringSubstr(saGMT[4], 1);  // mm
   saGMT[5] = StringSubstr(saGMT[5], 1);  // ss
   saGMT[6] = StringSubstr(saGMT[6], 1);  // msec
}

Вот. Нашел.  Адрес переменной в MQL4 Thanks 2 stringo.

Причина обращения: