Войти

Показать полную графическую версию : Помогите разобратся со строками в С++


Guest
13-05-2004, 21:27
Подскажите как сложить две строки

BrutalBit
13-05-2004, 23:16
#include <string.h>
...
char *result;

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

pva
14-05-2004, 08:58
#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
А вот еще вопрос если объявить три указателя на тип char а потом их сложить вобще ето реально и если можно привести примерчик

Guest
14-05-2004, 12:22
Блин что то не получается вот код
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
Вы не выделяет память под хранение строк. Куда по-Вашему это всё должно сваливаться? Посмотрите в сторону 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
Вот разобрался но при выводе результата первые символы идут какието непонятные как можно от них избавится

hasherfrog
17-05-2004, 09:12
day[0] = '\0';

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

hasherfrog
20-05-2004, 12:23
Ну естественно. Именно поэтому надо это сделать до первого day=strcat(day,string)

pva
21-05-2004, 11:00
Чем вас  С++ не устраивает?

#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
Чем вас  С++ не устраивает?
Да всё устраивает, просто решать задачи можно по-разному. Мне вообще изначально был непонятен вопрос. Точнее, как вообще появился этот вопрос. Ведь С++. ++!!! Какие проблемы - юзай классы строк да и всё.
Для интересующихся - вот, откопал в сети по теме (не специально искал, просто совпало)
/* 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
Господа, используйте (кто не использует) теги форума для отображения кода, где ваш программистский стиль? Читаемость же растет...




© OSzone.net 2001-2012