[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 58

 

He reescrito la función de sustitución de cadenas con arrays:

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


Ahora pasa por 2 caracteres por cadena, por ejemplo, la cadena 1215 será reemplazada por ab. Pero me encontré con un problema: la función omite los caracteres que no están en la matriz y omite el último carácter si la cadena tiene un número impar de caracteres. Por favor, ayude a cambiar la función para que la cadena 1214153 sea reemplazada por a14b3. Gracias.

 
Lians:

Por favor, ayúdenme a cambiar la función para que la línea 1214153 sea sustituida por a14b3. Gracias.


No entiendo la lógica, tienes 14 en el array, es decir, debería ser sustituido por "e". Se puede jugar con la paridad, pero es mejor añadir ceros, es decir, sustituir el 3 por el 03.
 
Lians:

He rehecho un poco la función de sustitución de caracteres de la cadena con arrays:


Creo que te estás volviendo un poco loco. Si necesita una función de sustitución de subcadenas, puede utilizar esta opción:

// функция ищет 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);
} 

He retocado un poco el final, no me he dado cuenta inmediatamente de la función de bucle

 
Roger:

No entiendo la lógica, tienes 14 en el array, es decir, debería ser sustituido por "e". Se puede jugar con la paridad, pero es mejor añadir ceros, es decir, sustituir el 3 por el 03.
Oh, lo siento, no me di cuenta, entonces digamos 1217153 a a17b3, sobre la paridad - añadir ceros está bien, ¿puede hacer eso? O dejar que omita el último carácter, pensé que no es importante.
 
alsu:

Creo que te estás volviendo un poco loco. Si necesita la función de sustitución de subcadenas, puede utilizar esta opción:

Gracias. Pero mis cadenas son generadas y la sustitución tiene que ser generada también y preferiblemente tomar 2 caracteres a la vez.
 
¿Cómo puedo establecer el marco temporal en el que se ejecutan las operaciones? (hora de inicio y hora de finalización)
 

Lians:
Oh, lo siento, no me di cuenta, entonces digamos 1217153 a a17b3, sobre la paridad - la opción de añadir ceros funcionaría, ¿puede hacer eso?
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);
 }
En algún lugar como este.
 

Gracias, pero no puedo compilarlo, se bloquea en una cadena:

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

dice: '+=' - ambos operandos deben ser numéricos

¿Cómo lo arreglo?

 
Lians:

Gracias, pero no puedo compilarlo, se bloquea en una cadena:

Esto es lo que dice: '+=' - ambos operandos deben ser numéricos

¿Cómo lo arreglo?

No funciona para cadenas en MQL4.

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

Gracias, pero no puedo compilarlo, se bloquea en una cadena:

Es así: '+=' - ambos operandos deben ser numéricos

¿cómo lo arreglo?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
en mql4 no se puede utilizar el operador += para los tipos de cadena
Razón de la queja: