Показать полную графическую версию : Помогите разобратся со строками в С++
Подскажите как сложить две строки
BrutalBit
13-05-2004, 23:16
#include <string.h>
...
char *result;
result=strcat(string1,string2); //string1 +string2;
#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();
}
А вот еще вопрос если объявить три указателя на тип char а потом их сложить вобще ето реально и если можно привести примерчик
Блин что то не получается вот код
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;
}
}
...
Проанализируйте данный код.
Вот разобрался но при выводе результата первые символы идут какието непонятные как можно от них избавится
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)
Чем вас С++ не устраивает?
#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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.