Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите разобратся со строками в С++ (http://forum.oszone.net/showthread.php?t=29703)

Guest 13-05-2004 21:27 205419

Подскажите как сложить две строки

BrutalBit 13-05-2004 23:16 205420

#include <string.h>
...
char *result;

result=strcat(string1,string2); //string1 +string2;

pva 14-05-2004 08:58 205421

#include <string>
using namespace std;

{
...
string st1="string1";
string st2=" ";
string st3="string3"

string st4=st1+st2+st3;
}

не советую использовать bcb4. Он глюкаво написан. bcb6 работает.
Советую ms vc 6 или (лучше) Metrowerks CodeWarrior 8.0

Добавлено:

второй вариант:

#include <sstream>

{...
stringstream oss;
oss << "string1" << ' ' << "string2";
return oss.str();
}

Guest 14-05-2004 10:21 205422

А вот еще вопрос если объявить три указателя на тип char а потом их сложить вобще ето реально и если можно привести примерчик

Guest 14-05-2004 12:22 205423

Блин что то не получается вот код
main (void){
int nomer,stepen,done,provfile,provtek,flag;
struct tm *newtime;
char *day;
char string[30]
FILE *stream;
stream=fopen("plus","r");
if (stream!=NULL)
   {
   while(feof(stream)==0)
        {
        (fscanf(stream, "%s", string));
        day=strcat(day,string)

      }
   }
   fclose(stream);
   printf (day);
выдает ошибку
пытаюсь писать на Борланд С++ 4.0

Добавлено:

Задача такая нужно прочитать из файла строки и сложить их все в одну большую кучу

hasherfrog 14-05-2004 12:33 205424

Вы не выделяет память под хранение строк. Куда по-Вашему это всё должно сваливаться? Посмотрите в сторону malloc/calloc.

Добавлено:

Вот стандартный пример из man vprintf. Это почти то что Вам надо.
Код:

...
Указание достаточно большой строки и ее вывод (код корректен для обеих версий: glibc 2.0 и glibc 2.1):
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
char *
make_message(const char *fmt, ...) {
/* необходимо не более 100-а байтов. */
int n, size = 100;
char *p;
va_list ap;
if ((p = malloc (size)) == NULL)
  return NULL;
while (1) {
  /* Попытайтесь произвести печать в pазpешенном пpостpанстве. */
  va_start(ap, fmt);
  n = vsnprintf (p, size, fmt, ap);
  va_end(ap);
  /* Если выполнено, возвpатить стpоку. */
  if (n > -1 && n < size)
    return p;
  /* Произвести повторную попытку, с пространством большего размера. */
  if (n > -1)    /* glibc 2.1 */
    size = n+1; /* Это то, что необходимо */
  else           /* glibc 2.0 */
    size *= 2;  /* Удвоить стаpый pазмеp */
  if ((p = realloc (p, size)) == NULL)
    return NULL;
  }
}
...

Проанализируйте данный код.

Guest 14-05-2004 15:37 205425

Вот разобрался но при выводе результата первые символы идут какието непонятные как можно от них избавится

hasherfrog 17-05-2004 09:12 205426

day[0] = '\0';

ParsVita 20-05-2004 12:05 205427

Простите, по-моему, если сделать
           day[0] = '\0';
то это будет конец строки, и вообще на экране ничего не будет(((
или нет?

hasherfrog 20-05-2004 12:23 205428

Ну естественно. Именно поэтому надо это сделать до первого day=strcat(day,string)

pva 21-05-2004 11:00 205429

Чем вас  С++ не устраивает?

#include<iostream>
using namespace std;

ifstream is("input.txt");

stringstream oss;

char c;
while(is>>c) if(c!='\n') oss<<c;

теперь oss.str() содержит нужную строку.
Потоки stream описаны шаблонами, поэтому эта программа эквивалентна strspy с проверкой на переполнение буфферов.

Добавлено:

Чем вас  С++ не устраивает?

#include<iostream>
using namespace std;

ifstream is("input.txt");

stringstream oss;

char c;
while(is>>c) if(c!='\n') oss<<c;

теперь oss.str() содержит нужную строку.
Потоки stream описаны шаблонами, поэтому эта программа эквивалентна strspy с проверкой на переполнение буфферов.

hasherfrog 21-05-2004 14:53 205430

Цитата:

Цитата pva
Чем вас  С++ не устраивает?

Да всё устраивает, просто решать задачи можно по-разному. Мне вообще изначально был непонятен вопрос. Точнее, как вообще появился этот вопрос. Ведь С++. ++!!! Какие проблемы - юзай классы строк да и всё.
Для интересующихся - вот, откопал в сети по теме (не специально искал, просто совпало)
Код:

/* Allocate the concatenation of N strings. Terminate arg list with NULL. */
char *dupcat(char *s1, ...)
{
    int len;
    char *p, *q, *sn;
    va_list ap;
 
    len = strlen(s1);
    va_start(ap, s1);
    while (1) {
        sn = va_arg(ap, char *);
        if (!sn)
            break;
        len += strlen(sn);
    }
    va_end(ap);
 
    p = malloc(len + 1);
    if (!p) {
        perror("malloc");
        exit(1);
    }
    strcpy(p, s1);
    q = p + strlen(p);
 
    va_start(ap, s1);
    while (1) {
        sn = va_arg(ap, char *);
        if (!sn)
            break;
        strcpy(q, sn);
        q += strlen(q);
    }
    va_end(ap);
 
    return p;
}


Prisoner 22-05-2004 04:49 205431

Код:

Господа, используйте (кто не использует) теги форума для отображения кода, где ваш программистский стиль? Читаемость же растет...


Время: 10:44.

Время: 10:44.
© OSzone.net 2001-