Невозможно правильно заменить текст с помощью функции StringReplace().

 

Вот логика кода, которую я программирую для замены слова соответствующим словом:

string Express_Labels[] = {"Signal_1", "Signal_1_5", "Signal_2", "Signal_2_5", "Signal_3", "Signal_3_5", "Signal_4", "Signal_5", "Signal_5_5"},
       Signal_Labels[] = {"1", "1.5", "2", "2.5", "3", "3.5", "4", "5", "5.5"};
                    
string Expression_Regeneration(string Input_expression)
  {
        string expression = Input_expression;
        int Total_Signal_Labels = ArraySize(Signal_Labels);

   if(StringLen(Input_expression) == 0)
     {
      expression  = "";

      for(int loop = 0; loop < Total_Signal_Labels; loop++)
        {
         expression = expression + "||" + Express_Labels[loop];
        }
      expression = StringSubstr(expression, 2);
     }
   else
     {
      for(int loop = 0; loop < Total_Signal_Labels; loop++)
        {
         StringReplace(expression, Signal_Labels[loop], Express_Labels[loop]);
         Print(expression);
        }

      Print(expression);
      ExpertRemove();
     }
   return expression;
  }

void Start()
{
string output = Expression_Regeneration("(1|||2.5)&&(3||5.5)");
}


Вот результат, который я получил при выполнении вышеприведенного:

(Signal_1|||2.5)&&(3||5.5)
(Signal_1|||2.5)&&(3||5.5)
(Signal_1|||Signal_2.5)&&(3||5.5)
(Signal_1|||Signal_Signal_2_5)&&(3||5.5)
(Signal_1|||Signal_Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_Signal_2_Signal_5)&&(Signal_3||Signal_5.Signal_5)
(Signal_1|||Signal_Signal_2_Signal_5)&&(Signal_3||Signal_5.Signal_5)
(Signal_1|||Signal_Signal_2_Signal_5)&&(Signal_3||Signal_5.Signal_5)
Результат, который я ожидал, был:
(Signal_1|||2.5)&&(3||5.5)
(Signal_1|||2.5)&&(3||5.5)
(Signal_1|||2.5)&&(3||5.5)
(Signal_1|||Signal_2_5)&&(3||5.5)
(Signal_1|||Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_2_5)&&(Signal_3||5.5)
(Signal_1|||Signal_2_5)&&(Signal_3||Signal_5_5)

Можете ли вы помочь мне получить ожидаемый результат?

 
jaffer wilson:

Вот логика кода, которую я программирую для замены слова соответствующим словом:



Вот результат, который я получил при выполнении вышеприведенного:

Результат, который я ожидал, был:

Можете ли вы помочь мне получить ожидаемый результат?

Fix :

Signal_Labels[] = {"{1}", "{1.5}", "{2}", "{2.5}", "{3}", "{3.5}", "{4}", "{5}", "{5.5}"};
Expression_Regeneration("({1}|||{2.5})&&({3}||{5.5})");

Элементы SignalLabels[] не должны быть подстроками другого элемента SignalLabels

 
jaffer wilson:

Вот логика кода, которую я программирую для замены слова соответствующим словом:



Вот результат, который я получил при выполнении вышеприведенного:

Результат, который я ожидал, был:

Можете ли вы помочь мне получить ожидаемый результат?

Что-то вроде:

if (StringReplace(expression, Signal_Labels[loop]+"|", Express_Labels[loop]+"|")==0 )
    StringReplace(expression, Signal_Labels[loop]+")", Express_Labels[loop]+")");

И, кстати, с точки зрения ввода данных в текст программы, иногда удобнее не

string Express_Labels[] = {"Signal_1", "Signal_1_5", "Signal_2", "Signal_2_5", "Signal_3", "Signal_3_5", "Signal_4", "Signal_5", "Signal_5_5"},
          Signal_Labels[] = {"1", "1.5", "2", "2.5", "3", "3.5", "4", "5", "5.5"};

а

string sExpress_Labels = {"Signal_1,Signal_1_5,Signal_2,Signal_2_5,Signal_3,Signal_3_5,Signal_4,Signal_5,Signal_5_5"},
          sSignal_Labels = {"1,1.5,2,2.5,3,3.5,4,5,5.5"};

string Express_Labels[], Signal_Labels[];

StringSplit(sExpress_Labels, ',', Express_Labels);
StringSplit(sSignal_Labels, ',',Signal_Labels);
 
Maxim Kuznetsov # :

Fix :

Элементы SignalLabels[] не должны быть подстроками другого элемента SignalLabels

Вау, это работает. Спасибо.