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


이제 한 줄에 2자를 반복합니다. 예를 들어 줄 1215는 ab로 대체됩니다. 하지만 문제가 발생했습니다. 이 함수는 배열에 없는 문자를 생략하고 문자열에 홀수의 문자가 있으면 마지막 문자를 생략합니다. 1214153 행을 14b3으로 바꾸도록 함수를 변경하도록 도와주세요. 덕분에!

 
Lians :

1214153 행을 14b3으로 바꾸도록 함수를 변경하도록 도와주세요. 덕분에!


논리를 이해할 수 없습니다. 배열에 14개가 있습니다. "e"로 대체되어야 합니다. 패리티로 쌓을 수 있지만 0을 추가하는 것이 좋습니다. 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"로 대체되어야 합니다. 패리티로 쌓을 수 있지만 0을 추가하는 것이 좋습니다. 3을 03으로 바꿉니다.
아, 죄송합니다. 눈치채지 못했는데 패리티에 대해 17b3의 1217153이라고 합시다 - 0을 추가하는 옵션이 가능합니다. 그렇게 할 수 있나요? 글쎄, 아니면 마지막 문자를 생략하도록 놔두어도 상관없다고 생각했습니다 .
 
alsu :

나는 당신이 뭔가에 있다고 생각합니다. 부분 문자열 대체 기능이 필요한 경우 이 옵션을 사용할 수 있습니다.

고맙습니다! 그러나 내 문자열이 생성되고 교체도 생성되어야 하며 각각 2자를 사용하는 것이 바람직합니다.
 
거래가 이루어질 시간 간격을 설정하는 방법을 알려주십시오. (하루의 시작 시간과 종료 시간)
 

리안 :
오, 죄송합니다. 알아차리지 못했습니다. 패리티에 대해 17b3의 1217153이라고 가정해 보겠습니다. 0을 추가하는 옵션이 가능합니다. 그렇게 할 수 있습니까?
 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는 문자열 유형 에 += 연산자를 사용할 수 없습니다.