[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 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);
}


これで、1つの文字列につき2文字を通過するようになり、例えば、文字列1215はabに置き換えられます。しかし、問題が発生しました。この関数は、文字列の文字数が奇数の場合、配列にない文字を省略し、最後の文字を省略します。文字列1214153をa14b3に置き換えるような関数に変更するのを手伝ってください。ありがとうございました。

 
Lians:

1214153行目をa14b3に置き換えるように関数を変更したいのですが、ご教授ください。ありがとうございました。


配列の中に14がありますね、つまり "e "に置き換えられるはずですが、このロジックが理解できません。パリティをいじってもいいのですが、ゼロを足す、つまり3を03に置き換える方がいいです。
 
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 "に置き換えられるはずですが、このロジックが理解できません。パリティをいじってもいいのですが、ゼロを足す、つまり3を03に置き換える方がいいです。
あ、すみません、気づきませんでした、では、1217153→a17b3としましょう、パリティについてですが、ゼロをつけるのはいいのですが、できますか? あるいは最後の文字を省略させる、重要ではないと思ったのですが。
 
alsu:

ちょっとオカシクなってきたんじゃない?部分文字列の置換機能が必要な場合は、このオプションを使用することができます。

ありがとうございました。しかし、私の文字列は生成され、置換も生成される必要があり、できれば一度に2文字を取ることが望ましいです。
 
売買が成立する時間帯を設定する方法を教えてください。 (開始時刻と終了時刻)
 

リアン です。
あ、すみません、気がつきませんでした。では、a17b3の1217153とします。パリティについてですが、ゼロを足すというオプションは有効ですが、それは可能でしょうか?
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では、文字列型に+=演算子を使用できません。