Bruno Urbieta 0 Denunciar post Postado Julho 4, 2006 Tem que ter uma função pra alterar uma string e retornar ela sem suas vogais. Só que também tem q retornar a quantidade de vogais removidas. Mas função só retorna 1 valor não é? Bom, tirando as partes do programa principal, eu coloquei só a função aqui: char alterastring (char a[]) { int i, j, cont=0; for (i=0;i<strlen(a);i++) { if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u' || a[i] == 'A' || a[i] == 'E' || a[i] == 'I' || a[i] == 'O' || a[i] == 'U') { //remove for (j=0;j<strlen(a);j++) a[j] = a[j+1]; cont++; } } //??} Ali no "//??" tem que ser o que vai ser retornado, mas eu não consegui fazer retornar nem a string. Tentei colocar "return a", mas ficou dando um erro que eu não conheço lá. O for que remove as vogais tá certo né? E como faz pra retornar a string e a variável cont? Tem como? Valeu ae... Compartilhar este post Link para o post Compartilhar em outros sites
frlouzada 0 Denunciar post Postado Julho 4, 2006 esse algoritmo está em C?? num manjo muito da sintaxe de C naum, mas aqui vai minha contribuição... Primeiramente no "//remove" no for não seria: for (j=i;j<strlen(a);j++) você tentou return a ou return (a) ? como ja disse não conheço a sintaxe, mas eu acho que tem que ter os parenteses, ou seja return (a). agora o problema da variável cont, não é melhor você passá-la como parâmetro por referência na função?! falo abraços... Compartilhar este post Link para o post Compartilhar em outros sites
abcd_man 0 Denunciar post Postado Julho 27, 2006 Bem, a única linguagem de programação que eu conheço onde você pode devolver duas variáveis é perl, se tais usando C é melhor usar parâmetros por referências (ou ponteiros), só peço que não tente usar variáveis globais. Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Julho 28, 2006 Bem! Pelo que sei, não há como retornar mais de um valor através de uma função e muito menos valores de tipos distintos, como é o seu caso (texto modificado = char e vogais removidas = int). Não entendi muito bem o que você quer, mas fiz um algoritmo baseado no que entendi. Não modifiquei a sua função de alterar string. Peguei a sua função para alterar a string e criei outra pra retornar o número de vogais removidas. Segue o código: #include <iostream.h>#include <stdlib.h>#include <string.h>char* alterastring (char a[]) { int i, j, cont=0; for (i=0;i<strlen(a);i++) { if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u' || a[i] == 'A' || a[i] == 'E' || a[i] == 'I' || a[i] == 'O' || a[i] == 'U') { //remove for (j=0;j<strlen(a);j++) { a[j] = a[j+1]; } cont++; } } return a;}int vogaisremovidas(char string1[50], char string2[50]){ return strlen(string1) - strlen(string2);}int main(){ char primString[50], // Recebe uma string digitada pelo usuário secString[50]; // Recebe a string modificada cout<<"Digite uma string "; cin>>primString; system("cls"); strcpy (secString, primString); /* atribui o valor da primeira string à segunda, afim de preservar o valor da primeira string */ strcpy (secString, alterastring(secString)); // receber string modific. cout<<"String modificada: "<<secString<<endl; cout<<"Vogais removidas: "<<vogaisremovidas(primString, secString)<<endl; system("pause"); return 0;} Apesar do tópico ser um pouco velho, espero ter ajudado. http://forum.imasters.com.br/public/style_emoticons/default/ninja.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
frlouzada 0 Denunciar post Postado Julho 28, 2006 Vergil, eu não sei se você leu minha resposta anterior, mas nela eu havia alertado sobre o "for" na hora de remover a vogal... char* alterastring (char a[], int *cont=0) { int i, j; for (i=0;i<strlen(a);i++) { if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u' || a[i] == 'A' || a[i] == 'E' || a[i] == 'I' || a[i] == 'O' || a[i] == 'U') { //remove for (j=i;j<strlen(a);j++) { a[j] = a[j+1]; } cont++; } } return a;}A variável "J" deve receber o valor da variável "I", senão ele vai sempre remover a letra da posição 0 da string. Muito provavel que não seja a vogal que deve ser removida. Outra observação é: Pq você manteve a variável CONT na sua função alterastring, se a contagem de strings removidas você faz na função vogaisremovidas. Eu ainda acho melhor passar a variável CONT por referência na função alterastring para não ter que criar outra função só pra contar. se não me engano para passar por referência deve-se usar uma asterísco antes do nome da variável. char* alterastring (char a[], int *cont=0)me corrijam se eu estiver errado. abcd_man, não entendi o motivo de não usar variáveis globais... Se eu for passar um parâmetro por referência na função alterastring eu terei que ter uma variável global no parametro real para receber o valor do parametro passado por referência no parâmetro formal da função. Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Julho 28, 2006 frlouzada, Sim, eu li sua resposta e concordo. Como disse não modifiquei a função dele (cabe a ele fazer isso, afinal, não era essa a dúvida). A dúvida era sobre retornar valores. E o programa que eu fiz satisfaz essa necessidade. Agora cabe a ele fazer as modificações lógicas do programa dele. Afinal, ele já disse que o main dele já está pronto. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
abcd_man 0 Denunciar post Postado Julho 29, 2006 abcd_man,não entendi o motivo de não usar variáveis globais... Se eu for passar um parâmetro por referência na função alterastring eu terei que ter uma variável global no parametro real para receber o valor do parametro passado por referência no parâmetro formal da função.Não necessariamente, uma variável global vai ficar visível em todo o programa, incluido todos os métodos, o que eu acho que cria uma confusão desnecessária, ele apenas precisa criar espaço na memória apenas no momento de chamar o método e passar o ponteiro para a função usar, logo depois de usar a resposta da função ele pode liberar o espaço da memória. Compartilhar este post Link para o post Compartilhar em outros sites
frlouzada 0 Denunciar post Postado Julho 31, 2006 ah sim... entendi o que você quis dizer...mas na minha opinião uma coisa compensa a outra.O espaço ocupado por uma variável do tipo inteiro na memória é tão pequeno, sem contar que quem não sabe trabalhar muito bem com ponteiro pode se complicar e no caso do C, pode acabar gerando problemas com ponteiro, como ponteiro pendurado e variável heap-dinâmica perdida. Nesse caso sim ele terá confusão desnecessária. Compartilhar este post Link para o post Compartilhar em outros sites
Luciana Guedes 0 Denunciar post Postado Agosto 2, 2006 Olá, Bruno!Sua proposta de solução apresentada já está correta, salvo obviamente a observação de frlouzada sobre o seu laço "for".Na linguagem C, um vetor passado como parâmetro para uma função, (no seu caso é "char a[]") já faz com que a informação contida neste vetor seja alterada.Com isso, você não precisa "retornar" a string. Ela já está sendo modificada dentro da função, entende? Já irá "retornar" para o programa principal com as modificações feitas, entende?Assim, só é preciso acrescentar um CONTADOR de vogais encontradas dentro de sua função e fazer com que ela retorne este valor INTEIRO (e não um "char" como você previu inicialmente).Espero ter auxiliado... Qualquer dúvida, estamos por aqui, ok? Abraços,Luciana.ps: a solução do Vergil é interessante, sem dúvida, mas fiquei com a impressão de que não faz exatamente o que o Bruno pediu. Compartilhar este post Link para o post Compartilhar em outros sites
skimo-solar 0 Denunciar post Postado Agosto 9, 2006 Pode-se utilizar uma estrutura para retornar dois ou mais valores, é só inclui-los como parte da estrutura. Compartilhar este post Link para o post Compartilhar em outros sites