Ir ao conteúdo

C Multiplexador de Strings em C


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Olá pessoal, estou começando na linguagem C e tô com esse problema pra resolver. Comecei o código mas em alguns testes propostos ele não funciona. Se alguém puder me ajudar fico grato.

 

Problema

"Um multiplexador é dispositivo que combina as sinais de múltiplas fontes em um único canal de saída. Crie um programa que simula um multiplexador para dois canais de entrada, A e B. Cada canal de entrada deverá receber uma string de até 40 caracteres. A saída C do multiplexador será os caracteres alternados de A e B. Caso um dos canais de entrada se torne ocioso (sem dados a processar), o canal de saída será ocupado pelos dados do canal remanescente. Exemplo: A=abc; B=defgh; C=adbecfgh".

 

Testes

Entrada 1

12345
abcde

Saída 1

 

1a2b3c4d5e

 

Entrada 2

Oamn
l udo

Saída 2

Ola mundo

 

Meu código até então...

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

int main(){
    char A[40], B[40];
    int tam;

    setbuf(stdin, NULL);

    fgets(A, 40, stdin);
    fgets(B, 40, stdin);

    tam = strlen(A) + strlen(B);

    char C[tam];

    int j = 0;
    for(int i = 0; i < tam; i++){
        else if(i%2 == 0){
            C[i] = A[i - j];
            j++;
        }else{
            C[i] = B[i - j];
            j++;
        }
    }
    printf("%s", C);
}

 

  • Solução
Postado

@ReginaldoPaz  Você pode usar duas variáveis para incrementar os índices das duas strings,

 

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

int main(){
    char A[40], B[40], C[80];
    int a = 0, b = 0, tam, j = 0;

    setbuf(stdin, NULL);
    fgets(A, 40, stdin);
    fgets(B, 40, stdin);
    
    a = strlen(A);
    b = strlen(B);
    tam = a + b;
    B[b - 1] = A[a - 1] = 0;
    a = b = 0;
    
    for(int i = 0; i < tam; i += 1){
        if(A[a]){
            C[j] = A[a];
            a += 1;
            j += 1;
        }
        if(B[b]){
            C[j] = B[b];
            b += 1;
            j += 1;
        }
    }
    C[j] = 0;
    printf("%s\n",C);
    return 0;    
}

 

Este trecho foi só para tirar o caractere '\n' da string,

 

B[b - 1] = A[a - 1] = 0;

 

  • Curtir 1
Postado
2 horas atrás, ReginaldoPaz disse:

setbuf(stdin, NULL);

Só um adendo quanto a isso: setbuf() controla o armazenamento em buffer para o fluxo especificado, e não tem efeito quando a história é com buffers criados pelo sistema, então não faz sentido escrever esse tipo de coisa.

fflush(), setbuf(), etc, não servem pra esse propósito.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!