Estoy haciendo un Programita para practicar mis habilidades con C++
Lo que hace es hacer un efecto de rotación hacia la derecha de una cadena.
Es decir, si la cadena a rotar fuera "HOLA" pasaría esto:
HOLA
AHOL
LAHO
OLAH
HOLA
Y con una limpiada de pantalla con el System("CLS"); se miraría bonito.
---------------
El punto es... que estoy teniendo problemas en la ejecución.
Compila...
Lo raro es... que solo funciona con ciertas cadenas.
Es decir, si pruebo con mi nombre:
"Santiago" funciona a la perfección, tal y como quiero.
Pero con cadenas mas cortas, no funciona.
Me saca del programa con una excepción.
Tampoco cadenas muy largas... unas si y otras no... lo mismo.
No se que patrón este siguiendo para dar o no dar la excepción.
No hay errores, pero me da una excepción que dice así:
Unhandled exception at 0x7c812afb in RotacionString.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0013e994..
¿Que podrá estar causando eso?
Aquí les dejo mi código, pruebénlo.
#include <iostream>
#include <string>
#include <vector>
#include <Windows.h>
using std::cout;
using std::cin;
using std::string;
using std::vector;
using std::iterator;
vector<string> VectorizarString(vector<string> vector, string str){
string letraactual;
for(int i = 0; i < str.length(); i++){
letraactual = str[i];
vector.push_back(letraactual);
}
return vector;
}
int main(int argc, char* argv[]){
string a;
vector<string> letras; // Este vector contendrá cada una de las letra que tenga la String a Rotar
vector<string>::iterator it = letras.begin(); // Este es un Simple Iterador, que apunta al Primer elemento del Vector letras
cout << "Ingresa una String: ";
cin >> a;
letras = VectorizarString(letras, a);
for(int i = 0; ; i++){
it = letras.begin(); // it se posiciona en el primer elemento del Vector letras
letras.insert(it, letras.back()); // Se inserta el ultimo elemento en la posicion de it
letras.pop_back(); // Se borra el ultimo elemento, ya que ahora este esta al inicio
for(int i = 0; i < letras.size(); i++){
cout << letras[i]; // Se muestra en pantalla el resultado, y el ciclo continua
}
Sleep(200);
system("CLS");
}
system("PAUSE");
return 0;
}