Jump to content

strcpy matriz dados int


PlayMa256

Recommended Posts

bom, estou a percorrer uma matriz, a qual possui dados tanto int quanto strings.

Bom, percorro de uma maneira, se eu achar por exemplo um =A1, quer dizer que preciso colocar no lugar desse A1 o que esta na posiçao A1 da minha matris(linha0, coluna0).

fiz desta maneira:

	if(strcmp(matris[i][c], "=A1") == 0){
		strcpy(matris[i][c], matris[0][0]);
	}
	if(strcmp(matris[i][c], "=C1") == 0){

		strcpy(matris[i][c], matris[2][0]);
	}

preciso fazer isso com tooooooodas as letras do alfabeto, e com todoas as colunas, A2, B2.....

Bom, cheguei a uma barreira, quando eu tenho na celula que ele aponta, um dado do tipo int, ele nao funciona essa copia que estou tentando fazer.

De que maneira poderia sobrepor esse =A1 pelo dado int que tem na posiçao que ele esta?

Obrigado.

Edited by PlayMa256
Link to comment
Share on other sites

  • Replies 43
  • Created
  • Last Reply

Top Posters In This Topic

só uma duvida, ele mantem o conteudo inteiro depois la na matris de char? por exemplo 21 ele mantem 21 na hora de printar?

Nem precisei utilizar, acabou que era problema na seleção das colunas mesmo...

Suponhamos que em uma celula eu tenha =A1+A2+A3, eu fiz a maneira pra substituir cada elemento pelo correspondente usando esses ifs, mas agora neste caso, se eu pedir pra substituir ele vai achar o A1, e vai simplesmente substituir tudo dessa celula pelo que tem na A1, como poderia fazer pra ele substituir o valor correspondente, e ainda fazer as operações com ele?

Obrigado.

Link to comment
Share on other sites

o primeiro elemento do sscanf é a string que será lida

a função retorna o número de elementos lidos correspondentes do formato dado. como disse para ler dois elementos (coluna e linha), a função só leu correctamente se o valor de retorno for 2.

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

no meu caso a string que será lida esta dentro da celula, no caso [linha][coluna].

Passei matris[k][c], "%c%d", col, linha

onde col e linha sao ponteiros (nao sei pq, mas pedia ponteiro).

Agora, de qualquer maneira eu nao preciso tratar, pra saber se col é A, B, C ou D? e linha se é 1, 2, 3? E depois fazer a substituição da coluna linha referente, e armazena-lo em uma variavel temporaria para fazer as operações necessarias?

Edited by PlayMa256
Link to comment
Share on other sites

char coluna;
int linha;

if (sscanf(&conteudo[pos], "%c%d", &coluna, &linha) == 2) {
 // tens a certeza que leu um caracter para a variável "coluna" e num número para a variável "linha" 
 // só tens de verificar se a combinação coluna/linha existe na tua matrix
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

o tipo de dados char não deixa de ser um número (de -128 a 127), assim como 'A' não deixa de ser um número.

para saber os vares reais dos caracteres podes ver qualquer ascii table

char c;
int i;

i = c - 'A'; // se c == 'A' => i = 'A' - 'A' => i = 65 - 65 = 0
i = c - 'A'; // se c == 'B' => i = 'B' - 'A' => i = 66 - 65 = 1
i = c - 'A'; // se c == 'C' => i = 'C' - 'A' => i = 67 - 65 = 2

...
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Uhm, essa parte entedi.

Tentei fazer um dump, pra ver se estava pegando direitinho, eu insiro A1 la mando processar, nao aparece Nem linhas nem colunas.

//inicializa as variaveis de controle
int i,c;
//inicializa as variaveis para o sscanf
char col;
int linha;

//faz o for do numero de llinhas
for(i=0;i<k;i++){
   //faz o for do numero de colunas
   for(c=0;c<colunas;c++){
       if (sscanf(matris[k][c], "%c%d", &col, &linha) == 2) {
               printf("linha: %d coluna: %c\n", linha, col);
       }
   }
}

eu percorro cada linha e cada coluna, e faço o sscanf em cada celula da matris, estranho isso..

Tem algum erro nisso?

Obrigado.

Edited by brunoais
Link to comment
Share on other sites

creio que nao, porque copei justamente o que postaste.

//inicializa as variaveis de controle
int i,c;
//inicializa as variaveis para o sscanf
char col;
int linha;
//faz o for do numero de llinhas
for(i=0;i<k;i++){
//faz o for do numero de colunas
for(c=0;c<colunas;c++){
 if (sscanf(matris[k][c], "%c%d", &col, &linha) == 2) {
		 printf("linha: %d coluna: %c\n", linha, col);
 }
}
}

fiz desta maneira só pra fazer um dump, pra ver se estava dando certo, mas nada =/

Edited by PlayMa256
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.