Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2012
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
Question ¿como unir cadenas en C y en C++?

hola.


tengo una duda que no logro entender.

en delphi si quiero unir cadenas uso
Código Delphi [-]
var
  cadenafinal :string;
begin
     cadenafinal  := 'valor uno';
     cadenafinal := cadenafinal  + 'valor 2';
     cadenafinal := cadenafinal  + 'valor 3';
    cadenafinal := cadenafinal  + 'valor 4';

memo1.lines.add(cadenafinal ) ;
end;

y en el memo obtengo

valor uno valor 2 valor 3 valor 4


en C y en C++ como se hace lo mismo??

no entiendo .. como


gracias.
Responder Con Cita
  #2  
Antiguo 24-05-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Para poder usar estas funciones tenemos que incluir la cabecera: string.h
con el primero:
Código:
fscanf(archivo, "%s", palabra);
largo = strlen(palabra);
palabra[largo-1] = '\0'; //con esto terminas la variable palabra.
strcat(frase, palabra);
si quieres usar sprintf hazlo así:
Código:
fscanf(archivo, "%s", palabra);
largo = strlen(palabra);
palabra[largo-1] = '\0'; //con esto terminas la variable palabra.
sprintf(frase, "%s ", palabra);
no lo he probado pero creo que asi deberia funcionar.

Última edición por Casimiro Noteví fecha: 24-05-2012 a las 18:33:27.
Responder Con Cita
  #3  
Antiguo 24-05-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
C++
strcat(): Concatenar cadenas
Sintaxis: char *strcat(char *dest, const char *src);
strcat agrega la cadena src a dest, la función termina hasta haber encontrado en src el caracter de terminación null.
Código:
char  nombre[]  = "Oscar E."; 
char  copia[80] = " Palacios"; 
strcat(copia, nombre); 
cout  << copia << endl;
Responder Con Cita
  #4  
Antiguo 24-05-2012
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
hoo

Gracias.
Casimiro Notevi

estilo delphi es fabuloso.. en c au no me acostumbro
Responder Con Cita
  #5  
Antiguo 25-05-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Existen muchas formas en C de concatenar cadenas. La mas usada es strcat como apunta Casimiro.
En C las cadenas se tratan a bajo nivel. Una cadena no es otra cosa que un array de char que terminan en un valor nulo.

Pero en C++ tenemos clases para manejar cadenas. En el entorno de Builder tienes la clase String que funciona casi igual que lo que ves en delphi y las puedes sumar.

Código:
String Cadena = "uno, " + "dos";

Saludos.
Responder Con Cita
  #6  
Antiguo 08-07-2016
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
Estoy usando c++ builder XE5 w32
y los componentes firedac para hacer consultas.

Sigo de novato en C++

por que en c++ no puedo hacer esto

Código:
  FDQuery1->Close();
  FDQuery1->SQL->Clear();
  FDQuery1->SQL->Add("SELECT * FROM EMPLOYEE ");
  FDQuery1->SQL->Add(" WHERE ");
  FDQuery1->SQL->Add(" FIRST_NAME = " + "'" + EditFName->Text + "'");


   Memo1->Text = FDQuery1->SQL->Text;

  FDQuery1->OpenOrExecute();
da el siguiente error

[bcc32 Error] FiredacConecta.cpp(129): E2085 Invalid pointer addition
Full parser context
FiredacConecta.cpp(124): parsing: void _fastcall TForm1::Button2Click(TObject *)

y si pasa asi.

Código:
  FDQuery1->Close();
  FDQuery1->SQL->Clear();
  FDQuery1->SQL->Add("SELECT * FROM EMPLOYEE ");
  FDQuery1->SQL->Add(" WHERE ");
  FDQuery1->SQL->Add(" FIRST_NAME = '" + EditFName->Text + "'");


   Memo1->Text = FDQuery1->SQL->Text;

  FDQuery1->OpenOrExecute();
Gracias

por su atencion
Responder Con Cita
  #7  
Antiguo 08-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Es que en:
Código PHP:
FDQuery1->SQL->Add(" FIRST_NAME = " "'" ... 
estas intentando concatenar dos cadenas C mediante el operador '+'. C++ no sabe tu intención en ese punto (de que resulte un AnsiString) y dá el error. De ese modo, habría que concatenarla por los modos que te mencionaron antes.

A ver si ejemplificando queda mas claro:
Código PHP:
...
{
  
AnsiString h1 "hola ";
  
AnsiString m1 "mundo";
  
ShowMessage(h1 m1); // Correcto

  
charh2 "hola ";
  
charm2 "mundo";

  
ShowMessage(h2 m2);           // ¡Error!, que es similar a:
  
ShowMessage("hola " "mundo"); // (lo que también es un error)
  
  // Sin embargo, indicando el tipo a convertir ,
  // como en los modos siguientes evitas el error:
  
ShowMessage((AnsiString)h2 + (AnsiString)m2);  
  
ShowMessage((AnsiString)h2 m2);  //(m2 es promovida)

  
ShowMessage((AnsiString)"hola " +(AnsiString)"mundo");  
  
ShowMessage((AnsiString)"hola " "mundo");  //("mundo" es promovida)
  
... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-07-2016 a las 13:26:39.
Responder Con Cita
  #8  
Antiguo 08-07-2016
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
Gracias.

ecfisa
Responder Con Cita
  #9  
Antiguo 11-07-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cuando trabajas con textos en C nunca hay que olvidar que las constantes de cadena son punteros y no realmente una cadena como en Pascal. En C++ estos pueden convertirse en objetos "string" haciendo la cosa algo más sencilla; me han dicho que desde el C99 la cosa ha mejorado mucho, aunque no lo he comprobado. La última vez que usé C++ los objetos "string" se comportaban a veces como cadenas Pascal y otras como punteros C, según le diera el aire, lo cual era un dolor en algunas ocasiones (errores difíciles de localizar). Si han arreglado eso, bien por ellos.
Responder Con Cita
  #10  
Antiguo 12-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si, como te comentan, es importante diferenciar el C-string de las clases string de C++(STL) y AnsiString de C++ Builder (VCL).

El primero es un arreglo de caracteres terminado en '\0'. Un C-string que almacena la palabra "hola" contiene cinco caracteres: 'h', 'o', 'l', 'a', '\0'.

Por otro lado existe una fuerte relación entre punteros y arreglos en C:
Código PHP:
{
  
char cad [] = "hola ";
  
charpcad = &cad[0]; // comúmente sólo: &cad
  
  //entonces se ve que: 
  
printf("%c %c"cad[0], *(pcad+0)); // h h
  
printf("%c %c"cad[1], *(pcad+1)); // o o 
Es tán intrínseca esa relación, que es muy común ver inicializar variables así:
Código PHP:
{
  
charcad "hola ";
  
  
printf("%c %c"cad[0], *cad); // h h 
La clase AnsiString es el análogo C++ Builder a las cadenas largas de Delphi (AnsiString).
En cuanto a las clases string (STL) y AnsiString (VCL), aunque no son iguales, permiten funcionalidades similares a la hora de asignar y concatenar.

string (STL):
Código PHP:
...
#include<string>

int main()
{
  
std::string s1 "hola ";
  
std::string s2 "mundo";
  
std::string s3 s1 s2
AnsiString (VCL):
Código PHP:
#include <vcl.h>
...
{
  
AnsiString s1 "hola "
  
AnsiString s2 "mundo";
  
AnsiString s3 s1 s2
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como recortar de una longitud de cadenas en c# uper .NET 1 12-11-2009 09:20:14
Cómo Unir archivos avi carmelina Varios 1 22-04-2009 13:01:39
como unir sql y delphi??? jermy MySQL 4 11-01-2007 23:23:51
Como concateno cadenas en Firebird?¿? burasu Firebird e Interbase 6 21-07-2004 13:38:29
Como Grabar Cadenas Media? Alejandro_J Varios 0 20-05-2003 18:06:30


La franja horaria es GMT +2. Ahora son las 21:36:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi