Ir para conteúdo
Fórum Script Brasil
  • 0

Outra duvida com string


viciado

Pergunta

Recebo duas cadeias de caracteres, verificar se a primeira cadeira e permutação da segunda cadeia, ou seja, se todos os caracteres da primeira cadeia estão presentes na segunda cadeia, mesmo que em posições diferentes.

Pensei em pegar duas strings e verificar se a primeira for maior que a segunda já fica impossivel ser permtação.

Agora como verifica se cada caracter da primeira string está presente em algum lugar da segunda string?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa noite!

Bom, pra começar eu pensei num algorítmo, daí resolví testar e acabei bolando um programa. Como eu comentei não vou explicá-lo, mas se tiver dúvidas pergunte. Programa:

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

short isAnagram(char *string1, char *string2)
{
  short x, y, len;

  len = strlen(string1);
  if (len != strlen( string2))        // Se tiver tamanhos diferentes...
    return 0;                         // Não são anagramas;
  for (x = 0; x < len; x++) {         // Checa caractere por caractere de string1;
    for (y = 0; y < len; y++)         // Compara cada caractere de string1 com cada caractere da string2;
      if (string1[x] == string2[y])   // Se achou, pára;
    break;
    if (y == len)                     // Se percorreu toda str2 e não achou...
      return 0;                       // Não são anagramas.
  }

  return 1;                           // Se tudo deu certo, são anagramas.
}

int main(void)
{
  char string1[20], string2[20];

  printf("Entre com duas palavras: ");
  scanf("%s%s", string1, string2);

  printf("%s", ((isAnagram(string1, string2) ? "Anagramas!\n" : "não são anagramas.\n")));

  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Logo que eu escreví esse código, fui tomar banho e percebi de um erro nele, na verdade eu o preví mas não sei porque achei ele insignificante. É o seguinte: algumas palavras com repetições de letras e mesma quantidade de números podem causar problema. Por exemplo "aaa" e "aea". Pensei num jeito de resolver, execute o procedimento 2 vezes invertendo a ordem das strings, por exemplo chamando duas vezes a função: if (isAnagram( "aaa", "aea") && isAnagram("aea", "aaa")) resolveria o problema, embora talvez gastasse muito tempo para strings longas

Editado por == Douplus ==
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...