Jump to content
PlayMa256

[Resolvido] Strings em matrizes bidimensionais

Recommended Posts

PlayMa256

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);

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

}
int ordena(int *vetor, int tamanho){
   int i;
   int j;
   int temp;

   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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

int main(){
   int tamanho = 0;
   int linhas;
   int colunas = 1;

   // ...

   char matris[linhas][colunas][301]; // <--- qual o valor de "linhas" e qual o valor de "colunas" ??


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

int main(){
   int tamanho = 0;
   int linhas;
   int colunas = 1;

   // ...

   char matris[linhas][colunas][301]; // <--- qual o valor de "linhas" e qual o valor de "colunas" ??

realmente, antes de dar refresh na pagina eu acabei vendo isso, ja foi corrigido.

fiz essa funçao:

int ordena(int vetor[], int tamanho){
   int i;
   int j;
   int temp;
   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];
}

estou passando assim:

       tamanho = strlen(vetor);
       colunas = ordena(vetor, tamanho);

e ele me da esse warning:

warning: passing arg 1 of `ordena' from incompatible pointer type|

E meu problema ainda continua sendo o de como colocar uma string antes do \t em cada "celula" da matriz, que é por exemplo matriz[5][5] ou matriz[6][7]

a entrada é essa por exemplo:

Teste 1 2 3 4 5 6 7 8

mas tambem será.

Teste =B1 =C1 =D1 =E1 =F1 =G1 =H1 =I1

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

e ele me da esse warning:

warning: passing arg 1 of `ordena' from incompatible pointer type|

int ordena(int vetor[],     // array de inteiros
          int tamanho) {
 // ...
}

int main(){
 // ...
 char vetor[301]; // array de char's
 // ...
}

E meu problema ainda continua sendo o de como colocar uma string antes do \t em cada "celula" da matriz, que é por exemplo matriz[5][5] ou matriz[6][7]

a entrada é essa por exemplo:

estás a perguntar como fazer/alterar no ficheiro ou ler do ficheiro ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

int ordena(int vetor[],	 // array de inteiros
	   int tamanho) {
 // ...
}

int main(){
 // ...
 char vetor[301]; // array de char's
 // ...
}

estás a perguntar como fazer/alterar no ficheiro ou ler do ficheiro ?

na verdade eu queria mesmo ler do fgets e colocar em uma celula da matris bidimensional, a ideia é o seguinte.

a leitura do texto será por linha, e em cada linha, o texto é separado por \t, eu queria pegar todo o texto entre esses \t e colocar em uma celula da matris, porem esse texto poderá ser tanto int, quanto char.

Sei que minha matris terá no max [30linhas][26colunas]

porem tentei de tudo conté maneira, quebrar o texto no \t e nao consegui, tentei até com strtok mas sem exito.

colocando somente desta maneira

char *ponteiro;
ponteiro = strtok(vetor, "\t");

ai que me resta a duvida, ja que ele quebra em partes onde tem o \t, como vou pedir pra ele colocar em cada celula da matris? (por exemplo matris[1][0]

espero que tenha conseguido explicar.

Obrigado.

Share this post


Link to post
Share on other sites
PlayMa256

mas como posso fazer pra inserir esses "pedaços" em uma celula da matris?

Share this post


Link to post
Share on other sites
HappyHippyHippo

com atribuições ...

ps : ou no teu caso, como tens strings, com a função strcpy

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

desta maneira?

for(i=0;i<30;i++){
 for(j=0;j<26;j++){
	 while (ponteiro != NULL){
		 strcpy(matris[i][j], ponteiro);
		 ponteiro = strtok (NULL, " ,.-");

	 }
 }
}

Outra duvida, como estou recebendo tanto int quanto char na mesma linha, na hora de fazer o print da matris, de cada celula, que paramentro coloco no printf? %d ou %s ?

Share this post


Link to post
Share on other sites
HappyHippyHippo

1º - não podes fazer com ciclos flor porque não sabes quantos elementos tem a linha

2º - tu tens sempre strings


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

1º - não podes fazer com ciclos flor porque não sabes quantos elementos tem a linha

2º - tu tens sempre strings

1: mesmo eu sabendo que o maximo de linhas e de colunas da matris sera [30][26] ?

tentei fazer de um jeito pra descobrir a quantidade de colunas, mas nao deu muito certo, era este:

for(k=0;k<tamanho;k++){
    if(vetor[i] == '\t'){
        contador++;
    }
if(vetor[i] == '\0'){
        contador = 1;
    }


}

mas tava com um problema, porque ele sempre somava o numero de \t, nao pegava o maior deles, nem individualmente...

2: a ta, pensei que mesmo recebendo só numeros eu teria que colocar o %d, ok entao...o problema ainda continua sendo o 1º

Edited by pmg
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

como não sabes o número de elementos de cada linha, nunca poderás usar um ciclo com uma condição de paragem pré determinada


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

Entendo, pensei que como eu teria no max essa quantidade, eu pudesse procurar justamente por essa quantidade.

Bom, tentei achar a quantidade de colunas que terá, que sao a quantidade de \t +1 (fiz isso usando logica), porem, é o maior valor de todas as linhas que eu ler, ja tentei de todas as maneiras realizar um script pra fazer isso, só que sem muito sucesso.

//recebo o vetor
fgets(vetor, 301, stdin);
int tamanho = strlen(vetor);
	for(i=0;i<tamanho;i++){
//26, pq sei que 26 SERÀ o numero maximo de colunas, entao criei
//outro vetor, int contadores[26] pra poder armazenar o valor de
//cada contador, pra depois eu poder pegar o maior
		for(j=0;j<26;j++){
			if(vetor[i] == '\t'){
				contador++;
				contadores[j] = contador;
				contador = 1;
			}
		}
   }

Minha ideia é o seguinte, quando tiver o \t, eu fazer um ++ em um contador, depois colocar em um vetor, pq eu quero o maior numero de \t que ele ler, pra poder montar o numero maximo de colunas, pra assim poder montar percorrer a matriz pelo numero de linhas e de colunas.

Creio eu que nao ha algum erro de logica nesse script, mas tentei com ifs, fors e nao deu certo de maneira alguma.

Obrigado.

Edited by PlayMa256
GeSHi

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.