Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2012
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
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 Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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 Notevi fecha: 24-05-2012 a las 18:33:27.
Responder Con Cita
  #3  
Antiguo 24-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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: 21
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.197
Poder: 20
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: 21
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: 36
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: 21
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.000
Poder: 25
Ñ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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
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: 36
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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 17:59:35.


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