Ir ao conteúdo
  • Cadastre-se

C Como fazer para indicar a ( falta de uma letra ) não podendo usar o "-" no C/C++


Posts recomendados

@Rodrigo Diamond         essa quinta , você pode usar dois laços de repetição , sendo um dentro do outro , indo até o final de cada uma das duas string , usando o comando strlen() , para verificar se é diferente de todos os caracteres da primeira ,  e se todos os caracteres for diferente daquele caractere da primeira string , colocar esse caractere na terceira string , usando para isso um contador que irá posicionar o caractere na posição certa da terceira string .

Link para o comentário
Compartilhar em outros sites

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

int main(void) {
    char x[30], y[30], z[30];
    int i,maior;
    //recebe duas frases
    printf ("digite string x\n");
    gets(x);
    printf ("digite string y\n");
    gets(y);
    //ver qual a maior
    if(strlen(x)>strlen(y)){
    maior = strlen(x);
    }
    else{
    	maior = strlen(y);
	}
    //faz um laço no limite do tamanho da maior
    printf ("as letras da string x que nao estão na string y: %c\n");
   for (i=0;i<maior;i++){
   	
      if (x[i]!=y[i])
     printf ("%c",x[i]);
}



}


adicionado 2 minutos depois

#include <stdio.h>
#include <string.h>
int main(){
    char x[30], y[30], z[30];
    int i,maior,j,cont=0,flag;
    //recebe duas frases
    printf ("digite string x\n");
    gets(x);
    printf ("digite string y\n");
    gets(y);
    //ver qual a maior
    for(j=0; j<strlen(x); j++){
        flag=0;
        for(i=0; i<strlen(y); i++){
            if(x[j]==y[i]){
                flag=1;
                break;
            }
        }
        if( ! flag){
            z[cont]=x[j];
            cont++;
        }
    }
    z[cont]='\0';
    printf("string nova -> %s\n\n\n",z);
}

 

@devair1010, seria assim?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@herbertbahia acho que sim mano, muito obrigado mesmo, me salvou muito.

8 minutos atrás, herbertbahia disse:

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

int main(void) {
    char x[30], y[30], z[30];
    int i,maior;
    //recebe duas frases
    printf ("digite string x\n");
    gets(x);
    printf ("digite string y\n");
    gets(y);
    //ver qual a maior
    if(strlen(x)>strlen(y)){
    maior = strlen(x);
    }
    else{
    	maior = strlen(y);
	}
    //faz um laço no limite do tamanho da maior
    printf ("as letras da string x que nao estão na string y: %c\n");
   for (i=0;i<maior;i++){
   	
      if (x[i]!=y[i])
     printf ("%c",x[i]);
}



}

 

adicionado 2 minutos depois

@devair1010 é assim?

sim mano, me salvou muito. obrigado

adicionado 0 minutos depois

@devair1010 obrigado !! nao tinha pensado nisso

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@herbertbahia          seu código está bom , mas ali no enunciado diz para criar uma nova string usando os caracteres da string x , que não estão presentes na string y , então creio que poderia ser assim  :

#include <stdio.h>
#include <string.h>
int main(){
    char x[30], y[30], z[30];
    int i,maior,j,cont=0,flag;
    //recebe duas frases
    printf ("digite string x\n");
    gets(x);
    printf ("digite string y\n");
    gets(y);
    //ver qual a maior
    for(j=0; j<strlen(x); j++){
        flag=0;
        for(i=0; i<strlen(y); i++){
            if(x[j]==y[i]){
                flag=1;
                break;
            }
        }
        if( ! flag){
            z[cont]=x[j];
            cont++;
        }
    }
    z[cont]='\0';
    printf("string nova -> %s\n\n\n",z);
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@herbertbahia @Rodrigo Diamond

 

Não sei se entendi a ideia de ver qual a maior. Usando o mesmo índice para as duas strings, a menos que elas tenham o mesmo tamanho, o programa vai cancelar assim que tentar acessar um índice que não tenha nas duas. Ou deveria pelo menos...

 

Sugiro sempre mostrar os valores lidos quando se está aprendendo ou testando. No mínimo para não ter que ficar pensando se leu o que acha que leu...

 

E ler de verdade já é irrelevante no início. Sugiro usar coisas como

    strcpy(x, "uma string");
    strcpy(y, "uma outra string");

E testar a lógica. Ler uma string não acrescenta nada. Ler duas também não.

   //ver qual a maior
    if(strlen(x)>strlen(y)){
    maior = strlen(x);
    }
    else{
    	maior = strlen(y);
	}
    //faz um laço no limite do tamanho da maior
    printf ("as letras da string x que nao estão na string y: %c\n");
   for (i=0;i<maior;i++){
   	
      if (x[i]!=y[i])
     printf ("%c",x[i]);
}

 

adicionado 14 minutos depois

Em resumo: 

    if (x[i]!=y[i])

vai cancelar o programa a menos que as strings sejam iguais e então não adiantou muito ver a diferença.

 

E o penultimo printf()  tem um especificador %c mas não tem parâmetros para tanto

 

Sugiro não usar nunca caracteres acentuados nos programas a menos que seja obrigado...

  • Obrigado 1
  • Triste 1
Link para o comentário
Compartilhar em outros sites

Acho que assim funciona:

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

int main() {
    char stringBase[100] = "";          // String base
    char stringComparacao[100] = "";    // String de comparacao
    char letrasExclusivas[100] = "";    // Letras exclusivas da stringBase

    int insercao = 0;       // Posicao de insercao na string3

    bool presente = false;  // Indica se a letra foi encontrada

    // ----- Descomentar esse bloco na versao final
//    printf("Digite a primeira string: ");
//    fgets(string1, 100, stdin);
//    string1[strcspn(string1, "\n")] = '\0';
//
//    printf("Digite a segunda string: ");
//    fgets(string2, 100, stdin);
//    string2[strcspn(string2, "\n")] = '\0';
    // ----- Descomentar esse bloco na versao final

    // ----- Poupa tempo
    strcpy(stringBase, "a raposa esperta");
    strcpy(stringComparacao, "pulou pelo cachorro");
    // ----- Poupa tempo

    for (int i = 0; stringBase[i] != '\0'; ++i) {
        presente = false;

        for (int j = 0; stringComparacao[j] != '\0'; ++j) {
            if (stringBase[i] == stringComparacao[j]) {
                // Se ja encontrou, nao tem porque continuar procurando
                presente = true;
                break;
            }
        }

        if (!presente) {
            // Se nao encontrou, armazena a letra
            letrasExclusivas[insercao] = stringBase[i];
            insercao += 1;
        }
    }

    printf("------------------------- \n");
    printf("      String base: '%s' \n", stringBase);
    printf("String comparacao: '%s' \n", stringComparacao);
    printf("Letras exclusivas: ");

    for (int i = 0; letrasExclusivas[i] != '\0'; ++i) {
        printf("%c ", letrasExclusivas[i]);
    }

    printf("\n");
    printf("------------------------- \n");

    return EXIT_SUCCESS;
}

 

  • Curtir 1
  • Obrigado 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!