Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Программа на СТРОКИ


Автор: exo 18.3.2007, 22:07
Помогите найти ошибку или доделать программу по строкам.
Я вывожу с клавы строки.
выбираю номера любых двух, они выводятся, но я немогу их сцепить. То есть немогу
поставить одну в конец другой.

P.S.    Функции применять нельзя.
          Думаю что нужно делать через буфер но незнаю как.

ПОМОГИТЕ.

ЗАДАНИЕ
  Дан текст из нескольких строк. Предлагается сцепить строки
  номера которых вводятся пользователем.
  Строку результат вернуть в главную функцию.

пишу :

Код

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
   char** st(int n, int m);
   void pt(char** b, int n);
main()
{
const m=80;
int n,s1,s2,i;
char **b; //ukazatel na ukazatel
clrscr();
printf("\nvvod parametrov\n");

//zapolnenie matri
printf("\nKolvo strok n=");
scanf("%d%c",&n);
printf("\nvivod texta na ecran\n\n");
b=st( n,  m);

printf("\nishodnii text\n\n");
pt(b,n);

printf("\nvvedite s1=");
scanf("%d",&s1);
printf("\nwibranaja stroka1 \n");
puts (b[s1-1]);

printf("\nvvedite s2\n=");
scanf("%d",&s2);
printf("\nwibranaja stroka2 \n");
puts (b[s2-1]);

char so1[160];
char sn1[80];
//so1=b[s1-1];
//char *sn1=b[s2-1];
i=0;
while (b[s1-1][i])
{
so1[i]=b[s1-1][i++];
}
while (b[s2-1][i])
{
sn1[i]=b[s2-1][i++];
}
so1[i]='\0';
printf("\n\nrezultat\n");
//for(int i=0; i<n;i++)
puts(so1);
getche();

for( i=0; i<n;i++)
delete b[i];//osvobojdenie videlenoi pamjati
getche();
return 0;
}
char **st(int n, int m)
{
char **b;
b= new char *[n];   //Выделение памяти под n действительных чисел
for(int i=0; i<n;i++) //заполнение массива
b[i]=new char [m];  //заполнение массива

//zapolnenie texta
for( i=0; i<n;i++)
gets(b[i]);
return b;
}
void pt(char **b, int n)
{
for(int  i=0; i<n; i++)
puts(b[i]);
}

Автор: Валерия 18.3.2007, 22:50
Нужно создать третью строку, в которую добавлять по символу вначале с первой строки, потом со второй, но делать это нужно до \0

Автор: exo 18.3.2007, 23:05
а как это написать-то знаешь ?

Автор: zkv 18.3.2007, 23:43
Код

    char str1[100];//первая строка
    char str2[100];//вторая
//заполнение строк
//...
    char res[200];//сюда результат
    char *pRes = &res[0];//указатель на первый символ результата
    char *pStr = &str1[0];//указатель на первый символ первой исходной строки 
    while( pStr != '\0' ) //пока не достигнут конец первой строки
    {
          *pRes = *pStr;//копируем символ
          pRes++;          //переходим
          pStr++;           //к следующему
    }
    char *pStr = &str2[0]; //перенацеливаем указатель на вторую исходную строку
    while( pStr != '\0' )//теперь копируем ее
    {
          *pRes = *pStr;
          pRes++;
          pStr++;
    }
    *pRes = '\0';//записываем в результат признак конца строки

Автор: agl 19.3.2007, 00:48
Код


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *_strcat(char *s1, char *s2)
{
    char *buff = (char*)malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1));
    if(!buff) return NULL;
    char *p = buff;
   
    while(*s1) *p++ = *s1++;
    while(*s2) *p++ = *s2++;
    *p = 0;

    return buff;     
}

Автор: exo 20.3.2007, 10:19
а как (или что) вывести на экран....

ZKV : я воспользовался твоей подскказкой, но прога выдает ошибку в 14 строке ... 

14:         char *pStr = &str2[0]; 


вобщем я не могу вывести строку (результат сложения)    smile 
       (а точнее прога выводит только одну первую букву из получаемой)
   
     помогите разобраться ... smile 

Автор: agl 20.3.2007, 10:25
Код


void main(void)
{
    printf("%s\n\n", _strcat("Hello ", "world!"));
}

Функция _strcat описана в моем посте выше. Или тебя этот варианта не устраивает?

Автор: vinter 20.3.2007, 11:17
Цитата(exo @  20.3.2007,  10:19 Найти цитируемый пост)
я воспользовался твоей подскказкой, но прога выдает ошибку в 14 строке ... 

какую?

Цитата(exo @  20.3.2007,  10:19 Найти цитируемый пост)
вобщем я не могу вывести строку (результат сложения)            (а точнее прога выводит только одну первую букву из получаемой)

как выводишь?

Автор: Earnest 20.3.2007, 17:10
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)