Dev - C++ - En c++ cómo dar vuelta cada n caracteres de una palabra

 
Vista:

En c++ cómo dar vuelta cada n caracteres de una palabra

Publicado por Isabel (1 intervención) el 14/06/2017 20:45:36
Hola:
En c++ tengo que dar vuelta cada n caracteres una palabra, osea por ejemplo cada n = 2, dar vuelta el string HOLA, me tiene que quedar OHAL
Escribí este código pero no está resultando y no me doy cuenta del error. Alguien me puede ayudar ?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string invertirBloque(string s,int  k, int i){
	int j = k - 1 + i;
		while(j >= i){
			s.push_back(s[j]);
			j--;
		}
		return s;
}
 
string darVueltaK(string s, int k){
    	int l = s.size();
    	int i = 0;
    	while(i <= k - 1 + i && k - 1 + i < l){
    		s = invertirBloque(s, k, i)
	    ;
		i = i + k;
    	}
		return s;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re: En c++ cómo dar vuelta cada n caracteres de una palabra

Publicado por Dionicio (57 intervenciones) el 15/06/2017 04:47:26
No entiendo bien tu código ya que las variables contienen poca información y no dan claramente detalle de lo que pretende hacerse. Por otro lado he creado un función que hace lo que pretendes hacer. Tal vez no sea la mejor función, ni la más optima pero cumple con su cometido. He dejado un ejemplo para que veas más o menos como trabaja. Un saludo Isabel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
***
int main()
{
	string frase = "eMg suatC ++";
	int longitud = 12;
	int intervalo = 2;
 
	cout<<"La frase a invertir es \""<<frase<<"\""<<endl;
 
	frase = invertString(frase,longitud,intervalo);
 
	cout<<"La frase luego de invertir: "<<frase<<endl;
	cout<<endl;
 
 
	return 0;
}
 
string invertString(string palabra, int sz, int interval){
 
	int i = 0, tope = interval, aux;
	char temp;
 
	while(tope <= sz){
 
		while(i < tope){
			aux = tope - 1;
			if(tope != i){
				//Aplicando el método de la burbuja
				temp = palabra[aux];
				palabra[aux] = palabra[i];
				palabra[i] = temp;
			}
 
			i++;
		}
		tope += interval;
		i = tope - interval;//El valor que tentrá i será el tope - interval
	}
 
	return palabra;
}
***
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re: En c++ cómo dar vuelta cada n caracteres de una palabra

Publicado por Dionicio (57 intervenciones) el 15/06/2017 05:57:10
Tuve un pequeño error en la función invertString, pero lo solucioné. Aquí debajo dejaré el código nuevamente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
***
int main()
{
	string frase = "eMg suatC ++";
	int longitud = 12;
	int intervalo = 2;
 
 
	cout<<"La frase a invertir es \""<<frase<<"\""<<endl;
 
	frase = invertString(frase,longitud,intervalo);
 
	cout<<"La frase luego de invertir: "<<frase<<endl;
	cout<<endl;
 
	return 0;
 
}
string invertString(string palabra, int sz, int interval){
 
	int i = 0, tope = interval, aux;
	char temp;
 
	while(tope <= sz){
 
		aux = tope;
 
		while(i < aux){
			--aux;
 
			if(tope != i){
				//Aplicando el método de la burbuja
				temp = palabra[aux];
				palabra[aux] = palabra[i];
				palabra[i] = temp;
			}
			i++;
		}
 
		tope += interval;
		i = tope - interval;//El valor que tentrá i será el tope - interval
	}
 
	return palabra;
}
***
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

En c++ cómo dar vuelta cada n caracteres de una palabra

Publicado por Thanatos (199 intervenciones) el 15/06/2017 07:05:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
using namespace std;
 
string invertirGrupos(const string &, const size_t);
string invertirCadena(string const &);
 
int main() {
    string palabra;
    size_t n;
 
    cout << "palabra = ";
    cin >> palabra;
 
    cout << "n = ";
    cin >> n;
 
    cout << invertirGrupos(palabra, n) << '\n';
 
    return 0;
}
 
string invertirGrupos(const string &palabra, const size_t n) {
    string salida("");
    size_t i(0);
 
    while (i < palabra.length()) {
        string grupo(palabra.substr(i, n));
        (void)salida.append(invertirCadena(grupo));
        i += n;
    }
    return salida;
}
 
string invertirCadena(string const &cadena) {
    return string(cadena.rbegin(), cadena.rend());
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gregory
Val: 82
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

En c++ cómo dar vuelta cada n caracteres de una palabra

Publicado por gregory (34 intervenciones) el 01/07/2017 07:49:46
tanto codigo tanto bucles, nunca pensaron en usar una pila. Esta es la forma mas optima para voltear una string

dado una cadena hola

a pasarle a la pila te quedara hola al regresarlo olah

no paso el codigo porque es muy sencillo si saben manejar estructura de dato
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar