[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 58

 

Eu reescrevi a função de substituição de cordas com matrizes:

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);
}


Agora ele passa por 2 caracteres por corda, por exemplo, a corda 1215 será substituída por ab. Mas encontrei um problema: a função omite os caracteres que não estão na matriz e omite o último caractere se a cadeia tiver um número ímpar de caracteres. Por favor, ajude a mudar a função para que a corda 1214153 seja substituída por a14b3. Obrigado!

 
Lians:

Por favor, ajude-me a mudar a função para que a linha 1214153 seja substituída por a14b3. Obrigado!


Eu não entendo a lógica, você tem 14 na matriz, ou seja, deve ser substituída por "e". Você pode brincar com a paridade, mas é melhor adicionar zeros, ou seja, substituir 3 por 03.
 
Lians:

Eu retrabalhei um pouco a função de substituição de caracteres de corda com arrays:


Acho que você está ficando um pouco louco. Se você precisar de uma função de substituição de substrato, você pode usar esta opção:

// функция ищет matched_text в строке text и заменяет его на replace_text

string 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);
} 

Eu afinei um pouco o final, não notei imediatamente o recurso de looping

 
Roger:

Não entendo a lógica, você tem 14 na matriz, ou seja, ela deve ser substituída por "e". Você pode brincar com a paridade, mas é melhor adicionar zeros, ou seja, substituir 3 por 03.
Oh, desculpe, não notei, então digamos 1217153 a a17b3, sobre paridade - adicionar zeros é bom, você pode fazer isso? Ou deixar omitir o último personagem, eu achei que isso não é importante.
 
alsu:

Acho que você está ficando um pouco louco. Se você precisar da função de substituição do substrato, você pode usar esta opção:

Obrigado! Mas minhas cordas são geradas e a substituição tem que ser gerada também e de preferência levar 2 caracteres de cada vez.
 
Como posso definir o cronograma em que as negociações são executadas? (hora de início e de fim)
 

Lians:
Oh, desculpe, não notou, então digamos 1217153 em a17b3, sobre paridade - a opção de adicionar zeros funcionaria, você pode fazer isso?
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);
bool x=true;

 for (int i2=0; i2<ArraySize(symbols1); i2++)

 {
 if (symbols1[i2]==TwoSymbols) {textNew = textNew + symbols2[ i2 ] ; x=false; break;}

 }
if(x) textNew +=StrToInteger(TwoSymbols);
 }

 return (textNew);
 }
Em algum lugar como este.
 

Obrigado, mas não posso compilá-lo, ele está batendo em uma corda:

if(x) textNew +=StrToInteger(TwoSymbols);

diz: '+=' - ambos os operandos devem ser numéricos

Como posso consertá-lo?

 
Lians:

Obrigado, mas não posso compilá-lo, ele está batendo em uma corda:

Jura assim: '+=' - ambos os operandos devem ser numéricos

Como posso consertá-lo?

Não funciona para cordas na MQL4.

if(x) textNew = textNew + StrToInteger(TwoSymbols);
 
Lians:

Obrigado, mas não posso compilá-lo, ele está batendo em uma corda:

diz: '+=' - ambos os operandos devem ser numéricos

Como posso consertá-lo?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
em mql4 você não pode usar += operador para tipos de string