• Sábado 14 de Diciembre de 2024, 12:53

Autor Tema:  Stringbuilder En Visual C++  (Leído 4178 veces)

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Stringbuilder En Visual C++
« en: Miércoles 26 de Diciembre de 2007, 15:31 »
0
Hola,
estoy trabajando en mi primera aplicacion WFA en visual studio 2005,para las cadenas de caracteres uso la clase StrinBuilder, pero resulta q ahora necesito comparar un SubString de un StringBuilder con un int,y no se como hacerlo, podrian ayudarme por favor ??

Este es un Ejemplo de lo q necesito hacer:

StringBuilder^ myString = gcnew StringBuilder();
myString.Insert(0,"pepe 152");

//si el substring a partir de la posicion 6,tres caracteres mas adelante es 152
if(myString->ToString()->SubString(6,3) == 152)
{
    return 1;
}

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #1 en: Miércoles 26 de Diciembre de 2007, 20:18 »
0
La comparacion que intentas hacer no es posible, ya que lo que estas obteniendo no es el numero 152, sino una cadena que contiene "152".

Aunque el contenido de una cadena sean numeros, no significa que los puedas manipular como numeros, siguen siendo cadenas.

Lo que debes utilizar, es la funcion strcmp, para comparar cadenas:

Código: Text
  1.  
  2. if (strcmp(myString->ToString()->SubString(6,3), "152") == 0)
  3.  
  4.  

la funcion strcmp devuelve 0 cuando las cadenas son iguales.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #2 en: Jueves 27 de Diciembre de 2007, 23:15 »
0
hola ProfesorX
muchas gracias por responderme,he tratado de utilizar esa funcion de C,pero el compilador no me la reconoce,sabes si tengo que incluir alguna libreria??
sds
Lyn

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Stringbuilder En Visual C++
« Respuesta #3 en: Jueves 27 de Diciembre de 2007, 23:45 »
0
no te la reconoce porque estas trabajando con C++ + managed extensions, es decir C++ .net, por lo cual:

1- se debe mover el hilo a otro foro
2- la solución es:

Código: Text
  1. if (myString->ToString()->SubString(6,3) == "152")
  2.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #4 en: Viernes 28 de Diciembre de 2007, 14:33 »
0
Hola Juank
sabes lo q necesito en realidad es ver si un caracter de un string esta entre 0 y 9 o si esta entre A y Z, para eso en C++ con builder lo q hago es esto:

String p;
p = "HOLA 109";
if(p.SubString(1,1).StrToInt() >= 0 && p.SubString(1,1).StrToInt() <= 9)
{
    //......
}
else
if(p.SubString(1,1).>= 'A' && p.SubString(1,1).StrToInt() <= 'Z')
{
  //....
}

me puedes decir como hacer esto con la clase StringBuilder de visual c++??
sds
LyN

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #5 en: Viernes 28 de Diciembre de 2007, 20:50 »
0
Puedes hacerlo con el codigo que te puso juank, como el codigo ASCII o Unicode de los numeros es consecutivo, cuando comparas los numeros como cadenas el '0', esta antes del '1', el '1' esta antes del '2', y asi sucesivamente, asi que es valido preguntar "1" < "9", solo utiliza comillas para los numeros, como te habia dicho antes, siguen siendo cadenas.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Stringbuilder En Visual C++
« Respuesta #6 en: Viernes 28 de Diciembre de 2007, 21:20 »
0
Entonces usa expresiones regulares, es lo mejor.

Es decir puedes hacer algo como esto:

Código: Text
  1.  
  2. public bool IsItNumber(string inputvalue)
  3.  
  4. {
  5.    Regex isnumber = new Regex(&#34;[^0-9]&#34;);
  6.    return !isnumber-&#62;IsMatch(inputvalue);
  7.  
  8. }
  9.  

eso te dice si una cadena es o no un numero... por ejemplo.

también las puedes utilizar para validar que sean letras etc. ,  etc.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #7 en: Domingo 30 de Diciembre de 2007, 22:00 »
0
Hola Juank y ProfesorX,

Segui sus consejos y trate de hacer esto:

StringBuilder^ sb = gcnew StringBuilder();
sb->Append("Hola 537 soy yo lyn");
if(sb->ToString()->Substring(6,1) >= "5")
   label2->Text = "Si";
else
   label2->Text = "No";

Pero el compilador me dice q es una comparacion ilegal para este tipo de datos....O sea el

me deja comparar si son iguales pero mayor igual y menor igual, no.
De que otra forma lo puedo hacer??

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Stringbuilder En Visual C++
« Respuesta #8 en: Domingo 30 de Diciembre de 2007, 22:10 »
0
no has seguido mi consejo...

lee todo de nuevo por favor.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #9 en: Domingo 6 de Enero de 2008, 16:45 »
0
JuanK
es q no conozco esas funciones q usas ahi...

public bool IsItNumber(string inputvalue)

{
  Regex isnumber = new Regex("[^0-9]");
  return !isnumber->IsMatch(inputvalue);

}

q es Regex ?
q es isnumber->ismatch ?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Stringbuilder En Visual C++
« Respuesta #10 en: Domingo 6 de Enero de 2008, 20:38 »
0
RegEx (lo que te vengo diciendo hace rato)quiere decir expreciones regulares y es un metodo ampliamente usado en rpogrmacion  para validar la estructura y o naturaleza de una cadena de texto.


basicamente

Código: Text
  1.  Regex isnumber = new Regex(&#34;[^0-9]&#34;);
  2.  
Esto crea la expresion regular que va a evaluar que la cadena este conformada solo por caracteres del 0 al 9... numeros.

Citar
isnumber->IsMatch(inputvalue);

IsMatch es el metodo del objeto RegExp que va evaluar que inputvalue cumpla con las caracteristicas de la expresion regular creada ([^0-9]) , este metodo devuelve true o falsxe segun sea que cumpla o no cumpla.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lyn489

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Stringbuilder En Visual C++
« Respuesta #11 en: Domingo 6 de Enero de 2008, 23:56 »
0
juank hay alguna via por la q podamos chatear??
ahora dime por la via esta q me explicas puedo comparar las cadenas para ver si son mayores o menores los numeros q tengo almacenados en los stringbuilder??

otra cosa q me pasa es q no tengo como asignarle a un int el contenido q me entren por un TextBox,pues en el builder usaba StrToInt pero aqui no se como hacerlo,
me ayudas??

sds y mil gracias por ayudarme!!!!!
LyN