Jump to content
PlayMa256

strcpy matriz dados int

Recommended Posts

PlayMa256

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

Share this post


Link to post
Share on other sites
Rui Carlos

Queres copiar um inteiro para uma matriz de strings?

Se for isso, só precisas de converter o inteiro para string, usando, por exemplo, o sprintf.

Share this post


Link to post
Share on other sites
PlayMa256

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

tu nunca deverias alterar o conteúdo de uma célula.

deverias guardar o resultado da avaliação do conteúdo da célula num outro local.


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

Share this post


Link to post
Share on other sites
PlayMa256

Percorro caractere por caractere, vejo se é A, vejo se i+1 é 1 guardo o valor, vejo se o próximo é +-*, ai faço com uma vvariável tmp certo?

Tem uma maneira mais fácil de fazer do que ficar comparando se é A B C, 1 2 3.?

Obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo
if (sscanf(&conteudo[pos], "%c%d", coluna, linha) == 2) {
 // leu correctamente o caracter da coluna e o caracter da linha
}


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

Share this post


Link to post
Share on other sites
PlayMa256

a funcao sscanf retorna o que? E porque == 2? Só isso que nao entendi

Outra coisa, tentei colocar a celula da minha matris, (matris[l][c]) como primeiro argumento pra extração dos dados, mas ele pediu um pointer, ta certo isso?

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
PlayMa256

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

Share this post


Link to post
Share on other sites
HappyHippyHippo
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

Share this post


Link to post
Share on other sites
PlayMa256

uhm, esqueçi do & mesmo.

Para verificar a combinação de linha e coluna, como estao em numeros, de qualquer maneira eu nao precisaria fazer uma verificação do tipo:

    if((col == 'A') && (linha == 1)){
	   temp = matris[0][0]
	 }
.
.
.

Nao? ou estou a pensar de uma maneira mais confusa e trabalhosa?

Share this post


Link to post
Share on other sites
HappyHippyHippo

char col;
int lin;

// ...

printf("o valor da celula %c%d : %s", col, lin, matrix[col - 'A'][lin]);

agora adapta aos limites/existẽncia da tua matrix


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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
PlayMa256

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

nenhuma das células da matrix começa com uma caracter seguido de um número


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

Share this post


Link to post
Share on other sites
PlayMa256

nossa :(

Eu como teste inseri:

1 2 3 4 5

A1 B1 C1 D1 E1

era pra ter retornado nao era? ja que a celula A2 começa com caractere e seguido de um numero...

Edited by PlayMa256

Share this post


Link to post
Share on other sites
PlayMa256

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

e desde quando que foi eu que fiz esses ciclos for ?

olha bem para o código que tens


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

Share this post


Link to post
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.