Divide vector according to delimiters and copy content to other strings in C

1

I need the main string "vector" to be traversed to the delimiter '=' and copy the previous values to '=' to 'second' and values after '=' to 'third'. Sure there is a smarter way to do this, but since I'm a beginner, I'm having a hard time figuring out the correct code for this requirement.

int tam = 256;

char vetor[tam];
char segundo[tam];
char terceiro[tam];
int i = 0;
int j = 0;

fgets(vetor, tam, stdin);

for (i = 0; i < strlen(vetor); i++){
    if (vetor[i] == '='){
        segundo[i] = vetor[i];
    } //continuar percorrendo a string e copiar valores após o delimitador '=' para o vetor "terceiro"
}

The intention is that when you enter the expression for example: 9 + 8i * 8-3i = it is possible to treat it in different vectors, in the following way: vector 1: 9 vector 2: + 8i vector 3: * 8 vector 4: -3i

If there are better ideas for calculating an expression with complex numbers, I'm open to ideas =) Ps.1: I try to make the most of the native functions of C, trying to minimize the functions of external libraries.

    
asked by anonymous 26.09.2016 / 06:51

2 answers

0

How about using the strtok() function of the default library string.h ?

Here's a sample (tested) code similar to yours:

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

#define MAX_TAM   (256)

int main( void )
{
    FILE * pf = NULL;
    char * p = NULL;
    char vet[ MAX_TAM + 1 ] = {0};
    char segundo[ MAX_TAM + 1 ] = {0};
    char terceiro[ MAX_TAM + 1 ] = {0};

    pf = fopen( "input.txt", "r" );

    if(!pf)
    {
        fprintf( stderr, "Erro ao abrir arquivo de entrada.\n");
        return 1;
    }

    while( fgets( vet, MAX_TAM, pf ) )
    {
        vet[ strcspn( vet, "\n" ) ] = 0;

        p = strtok( vet, "=" );

        if( p )
        {
            strncpy( segundo, p, MAX_TAM );
            p = strtok( NULL, "=" );
            strncpy( terceiro, p, MAX_TAM );

            printf("segundo='%s' terceiro='%s'\n", segundo, terceiro );
        }
    }

    fclose(pf);

    return 0;
}

Entry:

fibo=1.6180
e=2.7182
pi=3.1415
sqrt2=1.4142
sqrt3=1.7320

Output:

segundo='fibo' terceiro='1.6180'
segundo='e' terceiro='2.7182'
segundo='pi' terceiro='3.1415'
segundo='sqrt2' terceiro='1.4142'
segundo='sqrt3' terceiro='1.7320'

I hope I have helped!

    
26.09.2016 / 21:24
0

One possibility would be this:

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

int main(){

    int tam = 256;
    char vetor[tam];
    char segundo[tam];
    char terceiro[tam];
    int i = 0;
    int j = 0;

    fgets(vetor, tam, stdin);

    for (i = 0; i < strlen(vetor); i++){
        if (vetor[i] != '='){
            segundo[i] = vetor[i];  // Copia apenas caracteres diferentes de '='
        }
        else{
            break;      // Para o loop caso seja encontrado um '='
        }
    }
    segundo[i] = '
#include<stdio.h>
#include<string.h>

int main(){

    int tam = 256;
    char vetor[tam];
    char segundo[tam];
    char terceiro[tam];
    int i = 0;
    int j = 0;

    fgets(vetor, tam, stdin);

    for (i = 0; i < strlen(vetor); i++){
        if (vetor[i] != '='){
            segundo[i] = vetor[i];  // Copia apenas caracteres diferentes de '='
        }
        else{
            break;      // Para o loop caso seja encontrado um '='
        }
    }
    segundo[i] = '%pre%';  // Coloca o término de string (só pra garantir)

    // Aqui o '=' está na posição i, então temos que começar lendo de i+1

    for (j = i+1; j < strlen(vetor); j++){
        if (vetor[j] != '%pre%'){
            terceiro[j - i- 1] = vetor[j];
        }
        else{
            break;      // Para o loop caso a string acabe (chegue no '%pre%')
        }
    }
    terceiro[j - i - 1] = '%pre%';  // Coloca o término de string (só pra garantir)

    printf("segundo = %s\n", segundo);
    printf("terceiro = %s\n", terceiro);

}
'; // Coloca o término de string (só pra garantir) // Aqui o '=' está na posição i, então temos que começar lendo de i+1 for (j = i+1; j < strlen(vetor); j++){ if (vetor[j] != '%pre%'){ terceiro[j - i- 1] = vetor[j]; } else{ break; // Para o loop caso a string acabe (chegue no '%pre%') } } terceiro[j - i - 1] = '%pre%'; // Coloca o término de string (só pra garantir) printf("segundo = %s\n", segundo); printf("terceiro = %s\n", terceiro); }

Remember that if the string vector does not have a '=' in the middle the program will not work properly.

    
26.09.2016 / 13:38