Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MatheusSilva

Strings em matrizes bidimensionais

Recommended Posts

Bom dia.

Estou tentando montar algo na mesma logica de uma planilha do excel.

Em cada linha estou lendo strings e tambem ints, as quais estao separadas por \t, cada separação de \t significa uma coluna da "tabela"

 

Bom, ja tenho a logica de criar uma matris, onde a quantidade de linhas é a quantidade de linhas que ele lê, e a quantidade de colunas, onde estou indentificando como a quantidade max de \t, pra isso estou colocando cada valor de quantidade de \t's em um vetor, faço a ordenação e depois pego o maior valor, pra que é o max valor de colunas, entre os lidos.

 

Mas estou com um problema, nao consigo colocar cada dado, que esta antes de um \t, ou entre \t's, em uma linha e uma coluna de uma matris, alguem poderia me dar uma luz? quem sabe pra achar a quantidade de colunas de uma maneira mais eficiente.

 

meu codigo:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void ColocaCelula(char *vetor, char *matris, int k, int colunas){
    int l;
    int m;
        for(m=0;m<k;m++){
           char aux[301];
            for(l=0;l<k;l++){
                if((vetor[l] == 9) || (vetor[l] == 10)){
                    strcpy(matris, aux);
                    //coloca o aux no matris
                    colunas++;

                memset(aux,(char)0,sizeof(char)*50);
                }else{
                    strcat(aux, vetor);
                    //concatenar vetor[] no aux;
                }
            }
        }

}
int ordena(int *vetor){
    int i;
    int j;
    int temp;
    int tamanho = strlen(vetor);
    for(i=0;i<tamanho;i++){
        for(j=0;j<tamanho;j++){
            if(vetor[i] < vetor[j]){
                temp = vetor[i];
                vetor[i] = vetor[j];
                vetor[j] = temp;
            }
        }
    }

    return vetor[0];
}

int main(){
    int tamanho = 0;
    int linhas;
    int colunas = 1;
    char vetor[301];
    int k, i,l;
    int m;
    int j;
    k=0;

    char matris[linhas][colunas][301];

    while(1){

        fgets(vetor, 301, stdin);
        if(strcmp(vetor, "\n") == 0){
            break;
        }

        tamanho = strlen(vetor);
        k++;

    }


return 0;
}


Obs: meu codigo aparentemente esta quebrando, nao faço a ideia do porque.

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obtive alguns resultados a mais, porem continua a dar erro.

 

#include <stdio.h>
#include <string.h>
int conta(char c, char *s){
    int num_vezes=0;
    while(*s!='\0'){
        if(*s== '\t'){
            num_vezes++;
        }
        s++;
    }
    return num_vezes;
}
int ordenar(int vetorDeNumeros[]){
    int tamanhoVetor = (sizeof vetorDeNumeros)/(sizeof vetorDeNumeros[0]);
    int i;
    int j;
    int temp;
    for(i=0;i<tamanhoVetor;i++){
        for(j=0;j<tamanhoVetor;j++){
            if(vetorDeNumeros[i] < vetorDeNumeros[j]){
                temp = vetorDeNumeros[i];
                vetorDeNumeros[i] = vetorDeNumeros[j];
                vetorDeNumeros[j] = temp;
            }
        }
    }

    return vetorDeNumeros[0];
}
int main(){
    int tamanho = 0;
    char vetor[302];
    int m;
    int k=0;
    int colunas;
    int vetorDeNumeros[2];
    char matris[k][colunas];
    while(1){
        //Recebe os dados
        fgets(vetor, 302, stdin);

        //Verifica se tem a quebra de linha
        if(strcmp(vetor, "\n") == 0){
            break;
        }

        //Aqui eu insiro na funcao o vetor
        char *s = vetor;
        //Recebo a quantia de \t
        m = conta('\t', s);
        //Passo pra posicao do vetor, o numero de colunas
        vetorDeNumeros[k] = m+1;

        //Recebo o resultado do bubble sort
        colunas = ordenar(vetorDeNumeros);

        //faz a colocacao de cada elemento dentro de cada celula, tentei por funcao mas nao deu muito certo
        char *ponteiro;
        ponteiro = strtok(vetor, "\t");
        int i,j;
        for(i=0;i<k;i++){
            for(j=0;j<colunas;j++){
                while (ponteiro != NULL){
                    strcpy(matris[i][j], ponteiro);  // da erro de pointer pra integer
                    ponteiro = strtok (NULL, " ,.-");
                }
            }
        }
        //Quantia de linas que foram
        k++;
    }

//printf("%d", colunas);
int w,z;
for(w=0;w<k;w++){
    for(z=0;z<colunas;z++){
        printf("%s", matris[w][z]);
    }
}




return 0;
}

 

O que poderia ser esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.