Ir ao conteúdo

Posts recomendados

Postado

Oi, estou tentando fazer um programa que verifica os caracteres de duas strings, e tem de retornar quantas vezes nenhuma das letras se colidem, deslocando a diferença de tamanho para a direta, por exemplo:
SAWLWOSW

SAW                      nesse caso ele desloca 5 vezes pra direita, porém essa palavra só pode ser escrita 3x de forma que nenhuma letra de baixo seja igual alguma de cima

ou

JOAOJOAO          já nesse ele desloca 4 vezes a palavra porém só poderia ser 2 possibilidades

JOAO
 

int i = 0;
int j = 0;
contador=0;
bool igual=false;
for(contador=0; str1[i] && str2[j] != '\0'; contador++)
	{   
         for (str1[i] && str2[j];i++,j++;)
		{
			if (str[i] == str2[j])
			{
				igual;
				break;
			}
		}
			if (!igual)
			{
				contador++;
			}
   		}	
return contador;

em ambos os casos ele esta retornando "2" e com outro teste como 
AAAAAAAA

BB

ele retorna  "1" na contagem, o que não faz sentido pois seria 6 possibilidades porque nenhuma das letras da palavras vão ser iguais.

creio que seja erro bobo de logica, mas se alguém puder me ajudar no que eu poderia fazer ajudaria demais.

  • Obrigado 1
Postado

@mrkiraz      no primeiro exemplo você quer dizer que a primeira palavra tem essa qtd e caracteres a mais do que a segunda palavra , 
e também não entendi a construção desses Loop's for :

#include <stdio.h>
#include <stdbool.h>
int teste(char*, char*);
int main()
{
    char str1[50]={"qualquer"},
         str2[50]={"coisa e mais alguma coisa"};
    int ret = teste(str1,str2);
    printf("val retornaDo => %d\n\n\n",ret);
    return 0;
}
int teste(char str1[50], char str2[50])
{
    int i = 0;
    int j = 0;
    int contador = 0;
    bool igual = false;
    for(contador=0; str1[i] && str2[j] != '\0'; contador++)
    {   /// Como funciona essa parte Aqui ? -->   str1[i] && str2[j] != '\0';
        for (str1[i] && str2[j];i++,j++;)
        {
            if (str1[i] == str2[j])
            {
                igual; /// Qual a utilidade dessa linha ? !
                break;
            }
        }
        if ( !   igual )  /// se não for diferente de zero
        {
            contador++;   /// incrementa o contador de ?
        }
    }
    return contador;
}

 

  • Curtir 1
Postado

@devair1010 No primeiro exemplo eu quis dizer q a segunda palavra só poderia ser escrita de 3 formas possíveis se deslocando até o tamanho máximo da primeira  sem que nenhuma das letras sejam tanto iguais na str1 e str2 tipo 

// aqui todas sao iguais, entao não poderia, ai a ideia que tinha em mente seria o "for" que desloca a menor para a direita 

str1=  {S A W L W O S W}

str2 = {S A W} 
// aqui seria possível pois a posição de letras AWL não entraria em conflito com o SAW nessa posição e fazer todos os testes até o final da string e retornar o valor de possibilidades

str1=  {S A W L W O S W}

str2 = {   S A W}

// no terceiro deslocamento e teste ele ja não contabilizaria pois o W esta igual na posiçao da str1 e str2

str1=  {S A W L W O S W}

str2 = {       S A W}

 

#include <stdio.h>
#include <stdbool.h>
int teste(char*, char*);
int main()
{
    char str1[50]={"qualquer"},
         str2[50]={"coisa e mais alguma coisa"};
    int ret = teste(str1,str2);
    printf("val retornaDo => %d\n\n\n",ret);
    return 0;
}
int teste(char str1[50], char str2[50])
{
    int i = 0;
    int j = 0;
    int contador = 0;
    bool igual = false;
    for(contador=0; str1[i] && str2[j] != '\0'; contador++) // a minha ideia aqui seria fazer uma especie de varredura nas duas strings até encontrar o final delas que seria o '\0' 
    {  
        for (str1[i] && str2[j];i++,j++;)
        {
            if (str1[i] == str2[j])
            {
                igual; // aqui seria pra q sempre que ocorrer da letra da str1 e 2 serem iguais o valor booleano seria 0 
                break;
            }
        }
        if ( !   igual )  // aqui seria sempre q o valor acima for diferente de 0 como na regra acima ele contar como possibilidade de escrever a string sem conflitos de alguma letra
        {
            contador++;   
        }
    }
    return contador;
}

 

  • Obrigado 1
Postado
4 horas atrás, mrkiraz disse:

SAWLWOSW

SAW                      nesse caso ele desloca 5 vezes pra direita, porém essa palavra só pode ser escrita 3x de forma que nenhuma letra de baixo seja igual alguma de cima

então poderia deslocar só uma vez , pois  sem nenhum deslocamento já tem letras iguais , e no segundo deslocamento também terá uma letra igual , 

strings_3.thumb.JPG.ffdccde82898ca4bf5ba0cda5a2adfd2.JPG

  • Obrigado 1
Postado

@devair1010  Nesse 1º deslocamento apesar de ter a letra A e a letra W em comum ela esta em uma posição diferente com a segunda string que deslocou pra direita, ou seja nessa situação quero que ela compare apenas a letra A com o S  e respectivamente W com A e L com W.

 

1 hora atrás, devair1010 disse:

então poderia deslocar só uma vez , pois  sem nenhum deslocamento já tem letras iguais , e no segundo deslocamento também terá uma letra igual , 

strings_3.thumb.JPG.ffdccde82898ca4bf5ba0cda5a2adfd2.JPG

No 2º deslocamento as comparações que desejo fazer seria W com S, L com A, e W com W. Nessa situação essa ultima comparação ficou igual W=W.

  • Amei 1
Postado

Escreva em torno dos dados: escreva mais alguns casos no papel até se familiarizar com a ideia.

  • São dois loops, escreva um por vez. E teste.
  • No loop interno tem um break assim que alguma letra coincidir
  • tem um contador, claro.
  • 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!