Contagem de Ocorrências de Substring

israeltandrade  

Oi pessoal! Dúvbida a respeito da possibilidade de contagens de substrings.

Sei que a função StringFind apontará a posição de uma substring dentro de uma String. No entatno, se a mesma ocorrer mais de uma vez, seria possível contar?

Exemplo:

string  stringPara_contar = "encontreEURencontreEURencontreEUR";

Print(StringFind(stringPara_contar,"EUR",0));

No caso, a função apontaria a posição 8, mas também há ocorrências na pósição 19 e 30.

O que eu precisava era que fosse fornecido o número 3 (o número de ocorrências) e não a posição onde isso apareceu a primeira vez). Alguma sugestão?

Obrigado pela atenção, um abraço!

israeltandrade  

Resolvido! (de uma forma que não acho muito intuitiva)

Existe uma função que, ao substituir uma substring, fornece o número de ocorrências do procedimento. Bastou substituir o que estou procurando pela própria coisa que estou procurando :/

   string  stringPara_contar = "encontreEURencontreEURencontreEUR";

   Print(StringReplace(stringPara_contar,"EUR","EUR"))
Jonathan Pereira  
israeltandrade:

Resolvido! (de uma forma que não acho muito intuitiva)

Existe uma função que, ao substituir uma substring, fornece o número de ocorrências do procedimento. Bastou substituir o que estou procurando pela própria coisa que estou procurando :/

Sua solução resolve o seu problema de contagem, mas pode te dar outros problemas. E se dessas 3 ocorrências vc quisesse alterar apenas uma ou duas e não todas as  ocorrências ?

Enfim... Trabalhar com string nesse nivel em qualquer linguagem é sinônimo de gambiarra, rsrsrsrsrs, mas da para contornar isso procurando as posições da substring.

Já fiz muito isso em SQL para fazer uns relatórios malucos  =P.

Solução:

CString str;
string m_string = "encontreEURencontreEURencontreEUR";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   str.Append(m_string);
   Print("string inteira: ", str.Str());
   Print("total de caracteres na string: ", str.Len());

   int x = INT_MIN;
   for(int i=str.Len(); i>=0; i--)
     {
      int temp = str.Find(i,"EUR");
      if(temp != -1)
         if(temp != x)
           {
            x = temp;
            Print("Posição: ", temp);
           }
     }
   string newString = StringSubstr(str.Str(), 0 , 19)+"AUD"+StringSubstr(str.Str(), 22 , 33);
   Print(newString);
  }
israeltandrade  
Rogerio Giannetti Torres:

Bom dia,

gostei da solução!  Ideia anotada.

Valeu! :)

israeltandrade  
Jonathan Pereira:

Sua solução resolve o seu problema de contagem, mas pode te dar outros problemas. E se dessas 3 ocorrências vc quisesse alterar apenas uma ou duas e não todas as  ocorrências ?

Enfim... Trabalhar com string nesse nivel em qualquer linguagem é sinônimo de gambiarra, rsrsrsrsrs, mas da para contornar isso procurando as posições da substring.

Já fiz muito isso em SQL para fazer uns relatórios malucos  =P.

Solução:

Interessante!

Pois é, eu e minhas strings é gambiarra garantida. rs

Por hora aprendendo muita coisa ao mesmo tempo, mais a frente venho te importunar com dúvidas sobre o código aqui. xD