[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 58

 

我重写了用数组替换字符串的功能。

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。谢谢你!

 
Lians:

请帮助我修改该函数,使第1214153行被替换成a14b3。谢谢你!


我不明白这个逻辑,你在数组中有14,也就是说,应该用 "e "代替。你可以在奇偶性上做文章,但最好是加零,即用03代替3。
 
Lians:

我用数组重新设计了一下字符串字符替换功能。


我认为你变得有点古怪了。如果你需要一个子串替换功能,你可以使用这个选项。

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

我对结尾进行了一些调整,我没有立即注意到循环的功能

 
Roger:

我不明白这个逻辑,你在数组中有14,也就是说,应该用 "e "代替。你可以在奇偶性上做文章,但最好是加零,即用03代替3。
哦,对不起,没注意到,那就说1217153到a17b3吧,关于奇偶性--加零就可以了,你能做到吗? 或者让它省略最后一个字符,我以为这不重要。
 
alsu:

我认为你变得有点古怪了。如果你需要子串替换功能,你可以使用这个选项。

谢谢你!但我的字符串是生成的,而且替换也必须是生成的,最好是一次取两个字符。
 
我如何设置执行交易的时间框架? (开始时间和结束时间)
 

利安
哦,对不起,没有注意到,那么我们就说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);
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);
 }
像这样的地方。
 

谢谢,但我无法编译它,它在一个字符串上崩溃了。

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

就像这样:'+=' - 两个操作数都是数字

我如何修复它?

 
Lians:

谢谢,但我无法编译它,它在一个字符串上崩溃了。

这就是它所说的:'+=' - 两个操作数都是数字

我怎样才能解决这个问题?

在MQL4中,它对字符串不起作用。

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

谢谢,但我无法编译它,它在一个字符串上崩溃了。

它说:"+=" - 两个操作数都是数字。

我如何修复它?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
在mql4中你不能对字符串类型 使用+=运算符