| Blasted | 0 Posted March 9, 2009 Report Share Posted March 9, 2009 Bem, chegou a hora de me iniciar aqui neste excelente fórum. Um olá a todos! 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: 2a != b, b != x O código que tenho é este: #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: 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 poqNUMERO 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 Link to post Share on other sites
Cybernavigator 0 Posted March 12, 2009 Report Share Posted March 12, 2009 Vez o comprimento das duas palavras, calculas a diferença entre elas, fazes o ciclo até à palavra mais pequena, somas no final ao numero de letras diferentes, a diferença entre as duas palavras significa que todas as letras são diferentes. Acho que te está a dar o erro por causa do return, experimenta, qd chamas a função, fazes .c_str(); cout << letras_diferentes(palavra1, palavra2).c_str(); Acho que isso deve resolver. Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to post Share on other sites
Ferreira 0 Posted March 12, 2009 Report Share Posted March 12, 2009 O problema é que ", " é uma constante, e estás a tentar concatenar lá alguma coisa. Se separares essa operação em várias instruções esse erro deve desaparecer. http://twitter.com/ferreira Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now