Ir para conteúdo
Fórum Script Brasil
  • 0

Explode Do Php Em C, Tem Como?


Heldinho

Pergunta

Ai pessoal, preciso usar a função explode ou algo parecido.. tipo, ela pega uma variavel ex:

$variavel = " Numero 1 | Numero 2 | Numero 3";

se eu usasse explode na $variavel, com o "Argumento Separador" | , ele criaria uma array onde array[0] = Numero 1, array[1] = Numero 2.. dá pra entender o que quero??

Obrigadão!! ateh +!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Se fosse uma sequencia de chars, você poderia usar o StrTok, que é exatamente igual ao do PHP. Se você quiser uma String mesmo, essa função pode ser util:

void Tokenize(const string& str,
                      vector<string>& tokens,
                      const string& delimiters = " ")
{
    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    // Find first "non-delimiter".
    string::size_type pos     = str.find_first_of(delimiters, lastPos);

    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next "non-delimiter"
        pos = str.find_first_of(delimiters, lastPos);
    }
}
e, para usar:
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    vector<string> tokens;

    string str("Split me up! Word1 Word2 Word3.");

    Tokenize(str, tokens);

    copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, ", "));
}
E é só isso. Agora um com strtok:
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a sample string,just testing.";
  char * pch;
  printf ("Splitting string \"%s\" in tokens:\n",str);
  pch = strtok (str," ");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.");
  }
  return 0;
}

[]'s

iSoron.

fontes:

C++ Programming HOW-TO

C++ Reference Project

Link para o comentário
Compartilhar em outros sites

  • 0

cara, da um help ai:

/* strtok example */

#include <stdio.h>

#include <string.h>

int main ()

{

char str[] ="This is a sample string,just testing.";

char * pch;

printf ("Splitting string \"%s\" in tokens:\n",str);

while (pch != NULL)

{

  printf ("%s\n",pch);

  pch = strtok (NULL, " ,.");

}

return 0;

}

nesse codigo, ele mostra na tela a string separada por " " e um \n no final de cada palavra.. mas tipo, se eu quizesse mostrar apenas a 3ª palavra? em php seria $variavel[3] sacou? eu preciso é disso.. pois é pra fazer os programas na barra do botão "Iniciar" do os.. =) espero que possa ajudar.. Obrigadaum!!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, o código que você passou tem tudo que você precisa (porém faltava uma linha nele). A partir dele fiz o seguinte exemplo:

#include <stdio.h>
#include <string.h>

void main() {
    int n;
    char frase[]="isto é um teste";
    char * palavra;
    char * palavras[10];

    int i = 0;
    palavra = strtok(frase, " ");
    while (palavra!=NULL) {
        palavras[i] = palavra;
        i++;
        palavra = strtok(NULL, " ");
    }

    printf("%s\n", palavras[0]);
    printf("%s\n", palavras[1]);
    printf("%s\n", palavras[2]);
    printf("%s\n", palavras[3]);
}

Se quiser tornar isso mais prático é só criar uma rotina que receba uma string e um vetor (daí fica muito mais semelhante ao que vemos nas linguagens modernas).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

é muito comum, você em C encontrar ( apesar da vasta biblioteca ) funções que se encaixam, quase, no seu objetivo.

Eu criaria um while, ali no código, assim:

int numesp = 0;
int cont = 0;
while ( frase[ cont ] != '\0' ) {
      if ( frase[ cont ] == ' ' )
            numesp++;
      cont++;
}

Assim você pode saber qual o tamanho do seu array "palavras".

Ah, e às vezes ( quando desempenho não é o principal ) vale a pena reinventar a roda ( reescrever uma função já existente, para atender exatamente aos seus objetivos ). Mas como seu projeto é um OS, é melhor não, já que desempenho é fundamental.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      652k
×
×
  • Criar Novo...