Hola, estoy intentando hacer un programa que por ejemplo escribas una cadena, y a esa cadena sumarle un carácter, es decir, lea carácter a carácter, y lo muestre por pantalla, pero sumándole un carácter..
Explicación:CitarCadena Origen: "Hola que tal"
CitarCadena Final: "Ipmb rvf ubm"
Pero el resultado es este:CitarCadena Origen: "Hola que tal"
CitarCadena Final: "ipmbrvfubmmm"
Es decir, sube un carácter en toda la cadena, y los espacios los pone al final como la ultima letra... :-\ :-\
Podríais decirme porque podría ser?
Saludos
Si subes tu código, sería de ayuda ;-)
Pues a mí no me da ese problema:
Ipmb rvf ubm
#include <stdio.h>
int main(){
int i ;
char frase[100]="Hola que tal";
//printf("Escribe una frase: ");
//scanf("%s",&frase);
for (i=0;frase[i]!='\0';i++){
if (frase[i]!=' ')
frase[i]+=1;
}
printf("%s", frase);
return 0;
}
Saluditos!. .... (http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: leosansan en 19 Abril 2013, 21:56 PM
Pues a mí no me da ese problema:
Mi código es este, bueno, la parte en la que me da ese error:#include <stdio.h>
#include <iostream>
#include <fstream>
#include <io.h>
using namespace std;
int main(void)
{
/* char cadena[20];
int n;
printf("Escriba una frase\n");
gets(cadena);
printf("Cadena con caracter sumado\n");
for(n=0;n<19;n++)
{
printf("%c", cadena[n] + 1);
}
getchar(); */
string Nombre;
string Final;
printf("Escribe el nombre del archivo que deseas abrir: ");
getline(cin,Nombre);
ifstream fichero_original;
ofstream fichero_final;
char caracter1, caracter2;
fichero_original.open(Nombre.c_str(), ios::binary);
Nombre += "_Char.txt";
Final = Nombre;
fichero_final.open(Final.c_str(), ofstream::binary);
fichero_original.seekg(0,ios::end);
unsigned long Tamanyo = fichero_original.tellg();
fichero_original.seekg(0);
for (unsigned int i = 0;i<Tamanyo;i++)
{
fichero_original>>caracter1;
caracter2 = caracter1 + 1;
fichero_final<<caracter2;
}
fichero_original.close();
fichero_final.close();
}
Lo que hay en el comentario, entre /* */ no me da ningún problema, pero cuando abro un archivo si, al código le he quitado mucha cosa que no se necesita :silbar: :silbar:
Saludos
PD: Es una mezla de C y C++ :silbar:
parece una mezcla imprudente de c con c++ :P, lo podés hacer en C? por ejemplo ya lo hicieron anteriormente (sin la parte de abrir un archivo de texto).
Cita de: leosansan en 19 Abril 2013, 21:56 PM
...
#include <stdio.h>
int main(){
int i ;
char frase[100]="Hola que tal";
//printf("Escribe una frase: ");
//scanf("%s",&frase);
for (i=0;frase[i]!='\0';i++){
if (frase[i]!=' ')
frase[i]+=1;
}
printf("%s", frase);
return 0;
}
...
Esque lo que necesito es abriendo el fichero, porque de la otra manera si que funciona, pero al hacerlo en un txt me borra los espacios... :-\ :-\
Hola MeCrani xD.
Cambia el bucle for para que no modifique espacios:
for (unsigned int i = 0;i<Tamanyo;i++)
{
fichero_original>>caracter1;
if (caracter1 != ' ') // Si no es un espacio
caracter2 = caracter1 + 1;
fichero_final<<caracter2;
}
Cita de: MeCraniDOS en 19 Abril 2013, 22:17 PMLo que hay en el comentario, entre /* */ no me da ningún problema, pero cuando abro un archivo si [...]
PD: Es una mezla de C y C++ :silbar:
Como ya te comentaron no es una buena idea mezclar C y C++, mejor hacerlo todo en este ultimo. Para ello puedes utilizar los operadores >> y <<, también se debe utilizar noskipws para procesar todo el contenido del archivo de entrada incluyendo el espacio blanco.
Un programa de ejemplo:
#include <iostream>
using std::noskipws;
using std::cin;
using std::cout;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <string>
using std::string;
#include <cctype>
using std::isspace;
int main()
{
string nom_entrada;
cout << "Nombre del archivo de entrada: ";
getline(cin, nom_entrada);
ifstream entrada(nom_entrada.c_str());
noskipws(entrada);
string nom_salida = nom_entrada + "_Char.txt";
ofstream salida(nom_salida.c_str());
for (unsigned char ch; entrada >> ch; salida << ch)
if (!isspace(ch))
ch++;
entrada.close();
salida.close();
return 0;
}
Un saludo
Hola amchacon ;-),
Gracias a todos por las respuestas, ya solucioné el error :silbar:
Saludos