Título: Imprimir la palabra mas larga de un string C++ Publicado por: MellaSystems en 15 Febrero 2015, 23:08 pm Gente necesito una ayudita... Quiero hacer una funcion que reciba un string y que dentro del string busque la palabra mas larga y la imprima. Y quisiera saber como voltear un string alreves pero que se quede en la misma posicion con los metodos sort() y reverse().
tengo esto asi las pude voltear: #include <iostream> #include <string> using namespace std; void invertStringWords(string); void countVocals(string); void countConsonants(string); void countSpecialCharacters(string); void displayMaxCharacterWords(string); void countWords(string); int main() { string words; std::cout<<"Introduzca alguna frase: "; std::getline(std::cin,words); cout << endl << "Sentencia original: \t" << words << endl; reverse(words.begin(),words.end()); invertStringWords(words); system("pause"); return 0; } //Funcion que invierte el orden de las palabras en una cadena void invertStringWords(string words) { //Arreglo con la longitud de los caracteres en la sentencia int arraylength = words.length(); // índice para el caracter que está siendo leído int a=0; // String para almacenar la última palabra formada del arreglo string invert=""; // Arreglo de caracteres con la cadena final de palabras invertidas char invertedWords[arraylength]; // Ciclo que recorre la cadena original desde el final for(int i=arraylength-1; i >= -1; i--){ // Si encontramos un espacio ya hemos terminado una palabra // invertir la palabra y agregarla al principio del arreglo invertido if(i==-1 || words == ' ') { // Agregar la última palabra encontrada invertida en la sentencia // al principio del arreglo de cadena invertida for(int b=invert.length()-1; b >=0 ; b--) { invertedWords[a] = invert; a++; } // Agregar un espacio para delimitar palabra e incrementar el contador // 'a' solo si no se ha llegado al final del arreglo. if (i>-1) invertedWords[a++] = ' '; invert=""; } else { // Tenemos un caracter, agregarlo a la cadena temporal invert +=words; } } cout << endl << "Sentencia invertida: \t" << invertedWords << endl; } Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: Miseryk en 16 Febrero 2015, 04:36 am Gente necesito una ayudita... Quiero hacer una funcion que reciba un string y que dentro del string busque la palabra mas larga y la imprima. Y quisiera saber como voltear un string alreves pero que se quede en la misma posicion con los metodos sort() y reverse(). tengo esto asi las pude voltear: #include <iostream> #include <string> using namespace std; void invertStringWords(string); void countVocals(string); void countConsonants(string); void countSpecialCharacters(string); void displayMaxCharacterWords(string); void countWords(string); int main() { string words; std::cout<<"Introduzca alguna frase: "; std::getline(std::cin,words); cout << endl << "Sentencia original: \t" << words << endl; reverse(words.begin(),words.end()); invertStringWords(words); system("pause"); return 0; } //Funcion que invierte el orden de las palabras en una cadena void invertStringWords(string words) { //Arreglo con la longitud de los caracteres en la sentencia int arraylength = words.length(); // índice para el caracter que está siendo leído int a=0; // String para almacenar la última palabra formada del arreglo string invert=""; // Arreglo de caracteres con la cadena final de palabras invertidas char invertedWords[arraylength]; // Ciclo que recorre la cadena original desde el final for(int i=arraylength-1; i >= -1; i--){ // Si encontramos un espacio ya hemos terminado una palabra // invertir la palabra y agregarla al principio del arreglo invertido if(i==-1 || words == ' ') { // Agregar la última palabra encontrada invertida en la sentencia // al principio del arreglo de cadena invertida for(int b=invert.length()-1; b >=0 ; b--) { invertedWords[a] = invert; a++; } // Agregar un espacio para delimitar palabra e incrementar el contador // 'a' solo si no se ha llegado al final del arreglo. if (i>-1) invertedWords[a++] = ' '; invert=""; } else { // Tenemos un caracter, agregarlo a la cadena temporal invert +=words; } } cout << endl << "Sentencia invertida: \t" << invertedWords << endl; } Yo para obtener la frase más larga, lo que haría es rermplazar los "." (puntos), "," (comas) y demás con espacios, luego hago un split con delimitador de " " (espacio) y tengo todas las palabras separadas, busco en cada index cuál tiene la mayor longitud y guardo ese string y el index si es necesario. Y para voltear un string lo que tenés que hacer es ir leyendo el address del string original desde su última posición hacia su principio e ir copiando cada byte a otro address de otro string. Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: Miseryk en 16 Febrero 2015, 06:29 am Código
Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: eferion en 16 Febrero 2015, 11:26 am Invertir un string... que tal así:
Código
En cuanto a encontrar la palabra más larga... con iteradores se puede conseguir fácilmente: Código
El codigo usa dos iteradores, uno apunta al inicio de la palabra actual y el otro va avanzando hasta encontrar un espacio, si la longitud de la cadena es mayor que la palabra más larga encontrada hasta ahora, la sustituye. Simple y rápido. Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: Miseryk en 16 Febrero 2015, 15:52 pm Invertir un string... que tal así: Código
En cuanto a encontrar la palabra más larga... con iteradores se puede conseguir fácilmente: Código
El codigo usa dos iteradores, uno apunta al inicio de la palabra actual y el otro va avanzando hasta encontrar un espacio, si la longitud de la cadena es mayor que la palabra más larga encontrada hasta ahora, la sustituye. Simple y rápido. Muy bueno el invertir cadena, con respecto a la PalabraMasLargar hay un bug. Código
Código
Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: eferion en 16 Febrero 2015, 16:20 pm Muy bueno el invertir cadena, con respecto a la PalabraMasLargar hay un bug. La idea no era dar un código completo... si miras el algoritmo ves que separa palabras únicamente por espacios, pero se puede mejorar fácilmente para que sea capaz de reconocer otros tipos de separadores. Código
Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: Miseryk en 16 Febrero 2015, 23:11 pm La idea no era dar un código completo... si miras el algoritmo ves que separa palabras únicamente por espacios, pero se puede mejorar fácilmente para que sea capaz de reconocer otros tipos de separadores. Código
Interesante, tengo que ponerme a ver el nuevo framework, me quedé en string, pero no conocía "auto", gracias. Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: MellaSystems en 17 Febrero 2015, 01:39 am Muchas gracias a los dos por su aporte Myseryk y eferion muy buenos aportes
Título: Re: Imprimir la palabra mas larga de un string C++ Publicado por: Skynet96 en 19 Agosto 2016, 23:29 pm entonces como queda el codigo? jajaja
|