Pasar cadena String a una variable Char en C++

Iniciado por RGT, 6 Noviembre 2015, 13:38 PM

0 Miembros y 1 Visitante están viendo este tema.

RGT

Hola amigos,

Tengo esto:
string PalabraAdivinar = golf;

//Variable usada solamente para convertir la Palabra a Adivinar de String a Char y poder usar la función strcmp()
    char PalabraAdivinarChar[PalabraAdivinar.size()] = PalabraAdivinar;

//Uso de la función strcmp()
y = strcmp(PalabraAdivinarChar, Respuesta);


Debo pasar mi cadena String a Char para poder usar esta función y me compare si la Palabra a Adivinar ya es igual a la Respuesta, o sea, lo que ingresa el usuario. Para hacer esta comparacion hago uso de la funcion strcmp(), el cual solo trabaja con variables tipo Char.

La duda mia es, la variable Char esta bien declarada?, porque me da error en CodeBlocks.

Notar que hice esto:
PalabraAdivinarChar[PalabraAdivinar.size()]

no se me ocurrió otra forma de asignarle el tamaño que necesito jeje.

espero me ayuden chicos..

class_OpenGL

Si, está mal declarada. Cuando declaras un array al estilo C, no puedes usar variables para delimitar el tamaño. En todo caso, tendrías que hacer esto:

Código (cpp) [Seleccionar]
char *PalabraAdivinarChar = new char[PalabraAdivinar.size()];

Lo segundo, es que no puedes hacer esta asignación (no puedes asignar a un puntero char un objeto string):

Código (cpp) [Seleccionar]
PalabraAdivinarChar = PalabraAdivinar;

Tendrías que hacer esto:

Código (cpp) [Seleccionar]
const char *PalabraAdivinarChar = PalabraAdivinar.c_str();

Date cuenta de que no he creado un array (sería inútil), sino un puntero a una cadena.

Y lo tercero y último. Puedes comparar cadenas sin tener que usar esa función. En vez de eso, usa el método compare, de la clase std::string:

y = PalabraAdivinar.compare(Respuesta);

Si y vale 0, entonces las cadenas son iguales, y si es distinto de 0, es que no son iguales. Para ser más exacto, mira esta página:

http://www.cplusplus.com/reference/string/string/compare/

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

RGT

el metodo compare necesita que ambas cadenas sean strings, cierto?, o una de las dos cadenas puede ser tipo char?.

class_OpenGL

Esta es la función con sus diferentes sobrecargas:

Código (cpp) [Seleccionar]
int compare (const string& str) const noexcept;
int compare (size_t pos, size_t len, const string& str) const;
int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
int compare (const char* s) const;
int compare (size_t pos, size_t len, const char* s) const;
int compare (size_t pos, size_t len, const char* s, size_t n) const;


Las que te interesaría son:

Código (cpp) [Seleccionar]
int compare (const char* s) const;
int compare (size_t pos, size_t len, const char* s) const;
int compare (size_t pos, size_t len, const char* s, size_t n) const;


Argumentos (Copiado de la página de antes):

str
Another string object, used entirely (or partially) as the comparing string.
pos
Position of the first character in the compared string.
If this is greater than the string length, it throws out_of_range.
Note: The first character is denoted by a value of 0 (not 1).
len
Length of compared string (if the string is shorter, as many characters as possible).
A value of string::npos indicates all characters until the end of the string.
subpos, sublen
Same as pos and len above, but for the comparing string.
s
Pointer to an array of characters.
If argument n is specified (4), the first n characters in the array are used as the comparing string.
Otherwise (3), a null-terminated sequence is expected: the length of the sequence with the characters to use as comparing string is determined by the first occurrence of a null character.
n
Number of characters to compare.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL