Comparaçao de caracteres de duas strings - C/C#/C++ - Clube do Hardware
Comparaçao de caracteres de duas strings
Por mrkiraz,
23 de setembro em C/C#/C++
mrkiraz
mrkiraz 4
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
JOAOJOAO já nesse ele desloca 4 vezes a palavra porém só poderia ser 2 possibilidades
bool igual=false;
for(contador=0; str1[i] && str2[j] != '\0'; contador++)
for (str1[i] && str2[j];i++,j++;)
if (str[i] == str2[j])
if (!igual)
em ambos os casos ele esta retornando "2" e com outro teste como
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.
devair1010 3.371
@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 :
int teste(char*, char*);
char str1[50]={"qualquer"},
str2[50]={"coisa e mais alguma coisa"};
int ret = teste(str1,str2);
printf("val retornaDo => %d\n\n\n",ret);
int teste(char str1[50], char str2[50])
{   /// Como funciona essa parte Aqui ? -->   str1[i] && str2[j] != '\0';
igual; /// Qual a utilidade dessa linha ? !
if ( !   igual )  /// se não for diferente de zero
contador++;   /// incrementa o contador de ?
@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
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
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'
igual; // aqui seria pra q sempre que ocorrer da letra da str1 e 2 serem iguais o valor booleano seria 0
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
4 horas atrás, mrkiraz 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 ,
@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.
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.