Manipulação de vetor de strings

1. Manipulação de vetor de strings

Vinícius de Oliveira Ribeiro
BorealPick0

(usa Outra)

Enviado em 25/03/2018 - 20:25h

Estou com dificuldades. Quero que o usuario envie o numero de vezes que o programa fará uma soma entre dois números A e B, após isso eu confiro se a soma é um outro número impar ou par, porém se eu tentar usar uma string para guardar tal resulatado o compilador buga

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

int main(void)
{
int A, B, N, i, teste;

scanf("%i", &N);

char R[N];

for(i = 1;i <= N;i++)
{
scanf("%i %i", &A, &B);

teste = (A + B) % 2;

if(teste == 0)
{
strcpy(R[i], "Par");
}

else
{
strcpy(R[i], "Impar"); }
}

for(i = 1;i <= N;i++)
{
printf("\n%s", R[i]);
}
return 0;
}


Já testei o codigo trocando a string por um número inteiro e um até um caracter, porém não consigo fazer o mesmo com a string.
Obs: Eu preciso, obrigatoriamente, escrever: "Impar" ou "Par" na saída


  


2. Re: Manipulação de vetor de strings

Robot
Mr.Robot

(usa Ubuntu)

Enviado em 25/03/2018 - 20:37h

[quote]BorealPick0 escreveu:

Repare que o que você ta fazendo é tentar botar uma string(vários caracteres) dentro de uma posição de um vetor de caracteres, ou seja, onde cabe apenas um caractere.

strcpy(R[i], "Par");


Uma string em C é por si só um vetor de caracteres (tipo string[50]) um vetor de strings deveria ser uma matriz, por exemplo, string[N][10], que contém N strings de 50 caracteres(no máximo).


3. Re: Manipulação de vetor de strings

Vinícius de Oliveira Ribeiro
BorealPick0

(usa Outra)

Enviado em 25/03/2018 - 20:56h

Então como eu poderia fazer?



4. Re: Manipulação de vetor de strings

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 25/03/2018 - 21:39h

Como o Mr. Robot comentou, você precisaria armazenar o resultado numa matriz, pois estas querendo guardar múltiplas strings:

A sua ideia é algo semelhante a isso:

N = 3;

{ "Par",
"Impar",
"Par"}


Quando N = 3, então temos R[3], ou seja, um array com apenas 3 posições do tipo char.
Para que aconteça conforme o seu desejo, você ainda precisa adicionar o número de colunas, através do tamanho das palavras desejadas, no seu caso, "Par" e "Impar".


N = 3;
R [N][5];


Isso lhe daria algo como:

{
[0][0], [0][1], [0][2], [0][3], [0][4],
[1][0], [1][1], [1][2], [1][3], [1][4],
[2][0], [2][1], [2][2], [2][3], [2][4],
}

Mas você ainda comentou que o compilador "buga", o que na verdade ele deve é estar apresentando mensagens de erro, dizendo que você fez algo indevido. O compilador é seu amigo!

O seu programa atual, sendo compilado no GCC: https://ideone.com/A7fGCV

Mas eu diria que não precisa de uma matriz pra armazenar isso, basta utilizar uma lógica para armazenar o resultado e depois imprimir o que deseja:


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

int main(void)
{
int A, B, N, i;

scanf("%i", &N);

int R[N];

for(i = 0;i <= N;i++)
{
scanf("%i %i", &A, &B);
R[N] = (A + B) % 2;
}

for(i = 0;i <= N;i++)
{
printf("\n%s", R[i] ? "Impar" : "Par");
}
return 0;
}


Código: https://ideone.com/JhqQik

Agora é bastante importante notar que eu usei zero ao invés de um como primeiro indice do array, isso porque array SEMPRE começa no índice de número zero. Este é mais um erro de você deve levar em consideração sempre.
Para conferir isso, rode o seguinte programa:


#include <stdio.h>

int main() {
char frase[12] = {"Viva o Linux"};
for (int i = 1; i < 12; ++i) {
printf("%c", frase[i]);
}
}


Agora execute o mesmo código, modificando int i = 0; e observe a saída.


5. Re: Manipulação de vetor de strings

Hugo Cerqueira
hrcerq

(usa Outra)

Enviado em 25/03/2018 - 21:48h

Como disseram os colegas acima, você deve usar um vetor de strings, ou seja, uma matriz de caracteres. (Isto é, se for mesmo armazenar os valores, mas concordo com a sugestão de já apresentar o resultado do teste)

Veja que R[N] é uma string, portanto R[N] é um vetor de caracteres. Isso significa que nela você pode guardar o resultado de um único teste ("Par" ou "Impar"). Isso seria feito com a função strcpy da seguinte forma:

strcpy(R,"Par"); // Supondo que o resultado fosse par 


Mas o que acontece quando você quer guardar várias strings? Então você precisa de um vetor de strings, representado como:

char R[N][X]; 


Onde X é o tamanho máximo de cada string. Considerando que "Impar" é a maior string que você pode guardar, então você precisará de 6 posições no segundo index da sua matriz. Por que 6 e não 5, já que "Impar" tem 5 letras? Porque em C toda string tem um caracter nulo no final determinando o fim da string, logo toda string tem que ter um espaço adicional para este caractere. E digo mais: se você decidir adaptar seu programa para obedecer à língua portuguesa e escrever "Ímpar" (com acento) precisará de ainda mais um caractere, pois nesse caso o primeiro caractere (Í) precisará de dois bytes para ser armazenado. Os acentos fazem diferença para a linguagem C.

Depois de criada essa matriz (ou vetor de strings, neste caso), poderá preencher da seguinte forma:

strcpy(R[i], "Par"); // Para os valores pares
strcpy(R[i], "Ímpar"); // Para os valores ímpares


Vou fazer também uma sugestão de melhoria para este programa: antes de usar a função scanf para receber um valor do usuário, informe ao usuário que ele deve preencher um valor (e também informe qual valor), por exemplo:

printf("Digite o número de somatórios a fazer: ");
scanf("%i", &N);


---

Atenciosamente,
Hugo Cerqueira


6. Re: Manipulação de vetor de strings

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/03/2018 - 07:33h

O enunciado pede para armazenar o resultado num vetor? Pergunto isso porque se você vai preencher um valor com valores calculados em sequência somente para, logo em seguida, imprimir os valores armazenados na mesma ordem em que foram calculados, então provavelmente seria melhor já imprimir junto com o cálculo, economizando o vetor é um laço de repetição.

#include <stdio.h>

int main(void){
int n, a, b, k;
if(scanf("%d", &n)!=1)
return 1;
for(k=0; k<n; ++k){
if(scanf("%d %d", &a, &b)!=2)
return 1;
puts((a^b)&1? "impar": "par");
}
return 0;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts