| Blasted |
Portugal@Home Member
Hi folks ;D
Indo directo ao assunto: tenho um código em c++ para resolver um problema. O programa deve pedir duas palavras ao utilizador separadas por um espaço até que o comprimento das duas seja igual. Nesse momento deve dar uma mensagem indicando quais as letras diferentes na palavra. A mensagem a mostrar deverá ser algo como:
O código que tenho é este:
A minha ideia é ter uma função que analise duas palavras e produza a mensagem. Como podem ver caso seja a primeira letra diferente que encontra, dá a primeira parte da mensagem e depois nas outras dá basicamente o mesmo mas com a vírgula.
Uma nota para dizer que quando digo letras diferentes é tipo palavra1[ i ] == palavra2[ i ] e não ver se a letra se encontra na palavra.
Portanto compilando o meu código obtenho um erro nesta linha:
que me diz o seguinte :
Não percebo o porquê visto que em cima faço basicamente o mesmo e não me dá erro, e nesta linha se retirar o ", " já deixa de dar erro.
Se decidir tirar a virgula para testar e correr, obtenho outro problema.
Admitindo que insiro logo duas palavras de comprimento igual, tenho isto:
Não percebo o porquê de me dar aquela mensagem. Já revi isto n vezes e tenho 99% certeza que o meu algoritmo funciona, mas aparentemente algo está mal.
P.S: Ainda não tratei do caso de comparar maiúsculas com minúsculas, mas nesse caso é simples e usando o tolower resolvo rapidamente.
Obrigado desde já pela ajuda
Blasted
Indo directo ao assunto: tenho um código em c++ para resolver um problema. O programa deve pedir duas palavras ao utilizador separadas por um espaço até que o comprimento das duas seja igual. Nesse momento deve dar uma mensagem indicando quais as letras diferentes na palavra. A mensagem a mostrar deverá ser algo como:
NUMERO DE CARACTERES DIFERENTES: 2
a != b, b != x
O código que tenho é este:
Código:
#include <iostream>
#include <string>
using namespace std;
string letras_diferentes(string palavra1, string palavra2)
{
unsigned int numero_letras_diferentes = 0;
string mensagem;
unsigned int i = 0;
for (i; i<palavra1.length();i++)
{
if ((numero_letras_diferentes == 0) && (palavra1[i] != palavra2[i]))
{
mensagem += palavra1[i] + " != " + palavra2[i];
numero_letras_diferentes += 1;
}
else if (palavra1[i] != palavra2[i])
{
mensagem += ", " + palavra1[i] + " != " + palavra2[i];
numero_letras_diferentes += 1;
}
}
cout << "NUMERO DE CARACTERES DIFERENTES: " << numero_letras_diferentes << endl;
return mensagem;
}
int main()
{
string palavra1, palavra2;
do{
cout << "PALAVRAS ? ";
cin >> palavra1;
cin >> palavra2;
if (palavra1.length() != palavra2.length())
cout << palavra1.length() << " != " << palavra2.length() << endl;
else
cout << letras_diferentes(palavra1, palavra2);
}while(palavra1.length() != palavra2.length());
return 0;
}
A minha ideia é ter uma função que analise duas palavras e produza a mensagem. Como podem ver caso seja a primeira letra diferente que encontra, dá a primeira parte da mensagem e depois nas outras dá basicamente o mesmo mas com a vírgula.
Uma nota para dizer que quando digo letras diferentes é tipo palavra1[ i ] == palavra2[ i ] e não ver se a letra se encontra na palavra.
Portanto compilando o meu código obtenho um erro nesta linha:
Código:
mensagem += ", " + palavra1[i] + " != " + palavra2[i];
que me diz o seguinte :
Type invalid operands of types `const char*' and `const char[5]' to binary `operator+'
Não percebo o porquê visto que em cima faço basicamente o mesmo e não me dá erro, e nesta linha se retirar o ", " já deixa de dar erro.
Se decidir tirar a virgula para testar e correr, obtenho outro problema.
Admitindo que insiro logo duas palavras de comprimento igual, tenho isto:
PALAVRAS ? poi poq
NUMERO DE CARACTERES DIFERENTES: 1
ring::reserve
Não percebo o porquê de me dar aquela mensagem. Já revi isto n vezes e tenho 99% certeza que o meu algoritmo funciona, mas aparentemente algo está mal.
P.S: Ainda não tratei do caso de comparar maiúsculas com minúsculas, mas nesse caso é simples e usando o tolower resolvo rapidamente.
Obrigado desde já pela ajuda
Blasted