Теперь она перебирает по 2 символа в строке, например строка 1215 заменится на ab. Но столкнулся с проблемой: функция опускает символы, которых нет в массиве и опускает последний символ, если в строке нечетное количество символов. Помогите пожалуйста изменить функцию так, чтобы строку 1214153 она заменяла бына a14b3. Благодарю!
Помогите пожалуйста изменить функцию так, чтобы строку 1214153 она заменяла бына a14b3. Благодарю!
Непонятна логика, у тебя ж есть 14 в массиве, т.е. должно быть заменено на "е". С четностью можно нагромоздить, но лучше добавлять нули, т.е. заменить 3 на 03.
Переделал немного функцию замены символов строки через массивы:
По-моему, вы мудрите чего-то. Если вам необходима функция замены подстрок, можете воспользоваться таким вариантом:
// функция ищет matched_text в строке text и заменяет его на replace_textstring StringReplace(string text, string matched_text, string replace_text)
{
int pos=StringFind(text,matched_text);
while(pos>=0)
{
if(pos==0) text = StringConcatenate(replace_text,StringSubstr(text,StringLen(matched_text)));
else text = StringConcatenate(StringSubstr(text,0,pos),replace_text,StringSubstr(text,pos+StringLen(matched_text)));
pos=StringFind(text,matched_text,pos+StringLen(replace_text));
}
return(text);
}
чуть подправил конец, не сразу обратил внимание на возможность зацикливания
Непонятна логика, у тебя ж есть 14 в массиве, т.е. должно быть заменено на "е". С четностью можно нагромоздить, но лучше добавлять нули, т.е. заменить 3 на 03.
Оу, сорри, не заметил, тогда допустим 1217153 на a17b3, насчет четности - подойдет вариант с добавлением нулей, сможете так сделать?Ну или пусть опускает последний символ, я так подумал, что это не суть важно.
Переделал немного функцию замены символов строки через массивы:
string StrReplaceTwo(string text){
string textMod[] ={""};
string symbols1[] = {"12","15","19","13","14","16"};
string symbols2[] = {"a","b","c","d","e","f"};
string textNew="";
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1=i1+2)
{
string TwoSymbols = StringSubstr(text,i1,2);
for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==TwoSymbols) {textNew = textNew + symbols2[ i2 ] ; i2=ArraySize(symbols1) ; }
}
}
return (textNew);
}
Теперь она перебирает по 2 символа в строке, например строка 1215 заменится на ab. Но столкнулся с проблемой: функция опускает символы, которых нет в массиве и опускает последний символ, если в строке нечетное количество символов. Помогите пожалуйста изменить функцию так, чтобы строку 1214153 она заменяла бына a14b3. Благодарю!
Помогите пожалуйста изменить функцию так, чтобы строку 1214153 она заменяла бына a14b3. Благодарю!
Непонятна логика, у тебя ж есть 14 в массиве, т.е. должно быть заменено на "е". С четностью можно нагромоздить, но лучше добавлять нули, т.е. заменить 3 на 03.
Переделал немного функцию замены символов строки через массивы:
По-моему, вы мудрите чего-то. Если вам необходима функция замены подстрок, можете воспользоваться таким вариантом:
чуть подправил конец, не сразу обратил внимание на возможность зацикливания
Непонятна логика, у тебя ж есть 14 в массиве, т.е. должно быть заменено на "е". С четностью можно нагромоздить, но лучше добавлять нули, т.е. заменить 3 на 03.
По-моему, вы мудрите чего-то. Если вам необходима функция замены подстрок, можете воспользоваться таким вариантом:
Lians:
Оу, сорри, не заметил, тогда допустим 1217153 на a17b3, насчет четности - подойдет вариант с добавлением нулей, сможете так сделать?
Спасибо, но не могу скомпилировать, ругается на строку:
if(x) textNew +=StrToInteger(TwoSymbols);вот так ругается: '+=' - both operands are to be numeric
как исправить?
Спасибо, но не могу скомпилировать, ругается на строку:
вот так ругается: '+=' - both operands are to be numeric
как исправить?
Это не работает для строк в MQL4.
Спасибо, но не могу скомпилировать, ругается на строку:
вот так ругается: '+=' - both operands are to be numeric
как исправить?