Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

problema al obtener tamaño de string y al tratar de pasarlo a vector de char!!?

marmotau

Bovino maduro
Desde
6 Oct 2008
Mensajes
198
Que tal bakunos estoy aqui de nuevo, pues veran no me resulta este programa en la que tengo lo siguiente(ignoren las demas librerias son parte de otras partes del programa)
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
#include <sstream>
#include <cctype>

using namespace std;

class Logvec{
public:
void Frase(string fras){
int i,contp=0,lim=fras.size();//se supone que me tendria que obtener el espacio total de la cadena aun con espacios...
char aux[lim];
cout<<endl;
for(i=0;i<lim;i++){
aux=fras;
if(fras==' '){contp+=1;//NO SE PORQUE NO ENTRA A ESTE IF!!
i++;}
cout<<aux;//unicamente me imprime la 1era palabra la demas arroja basura
}
cout<<"\nContador de palabras:"<<contp;
system("pause>nul");
}
int Invertida(char *frasin,int tam){
int i;
char fras2[tam];
for(i=0;i<tam;i++){
for(int j=tam;j>0;j--){
fras2=frasin[j];//se supone que son vectores char y no se asigna nada a fras2
}
}
return *fras2;
}
int Long(string longi){
int i=0,e=1,contp=0;
do{
if(isalpha(longi)){
contp++;}
if(longi[i+2]==' '&&longi[i+1]==' '){e-=2;}//se rompera el do cuando e sea igual ya que e va a delantado pero se rompe el programa
i++;
e++;
}
while(i!=e);
return contp;//uincamente cuenta hasta la 1era palabra
}
};


int main(int argc, char *argv[]){
Logvec vec1,vec2,vec3,vec4,vec5,vec6,vec7;
string num,mor,fras,longi;
char frasin[100];
int tam=0,i;
c
cout<<"\nIngresa cadena para obtener el numero de palabras:"<<endl;
cin>>fras;;
vec3.Frase(fras);
cout<<"\nIngresa una frase para invertirla:"<<endl;
cin>>frasin;
for(i=0;i<100;i++){
if(isalpha(frasin)){
tam++; }
}
cout<<""<<vec4.Invertida(frasin,tam);
system("cls");
cout<<"Ingresa una cadena para su longitud:"<<endl;
cin>>longi;
cout<<""<<vec5.Long(longi);
system("pause>nul");
return EXIT_SUCCESS;
}

la 1era funcion es Implementar un método que recibe una cadena que puede ser una frase y retorna el total de palabras que la integran.
la 2nda . Implementa un método que recibe como parámetro un vector de char y su tamaño y retorne el vector de char invertida.
la 3era. Implementa un método que recibe como parámetro una cadena (string) y retorne la longitud de la cadena, no tienes permitido usar métodos que obtenga longitud.
Ojala me puedan ayudar el nucleo del problema es el string ya sea pasarlo a vec char y de ahi poderlo hace con el vector
 
a ver xD
voy a tratar de ir en orden

1) cuando haces cin>> String
eso toma los espacios en blanco como delimitadores(razon por la cual parece ser que nunca entra a tu if == ' ' :P)
deberias usar getline

2) en tu funcion Frase
cuando haces cout a un arreglo de caracteres se imprime hasta encontrar el caracter nulo, cosa que no tiene un string de c++, por eso es que te imprime basura

3)En tu funcion Invertida
aqui tu logica es un desmadre pero al final si deberia tener una copia invertida en fras2 xD pero
parece ser que aun no tienes bien claro como funcionan los apuntadores, te explico que hiciste :P
El return que quieres seria char*(vector de chars como tu les dices) por lo cual retornar fras2 tiene sentido
pero aqui es donde tienes el error
Estas retornando *fras2 * en punteros te devuelve el dato en la direccion fras2, pero fras2 (al ser declarado char[] fras2) es del tipo char*
por lo que *fras2 te devuelve el 'dato' en la direccion de fras2 que es el primer (y solo el primer) caracter en tu vector
lo que querias hacer era probablemente return fras2;

4)en tu funcion Long
no se bien a que te refieres con 'no usar metodos que obtengan la longitud', pero te puedo decir que tu programa truena por que estas intentando acceder mas caracteres de los que contiene tu string
 
Volver
Arriba