• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Задача на строки

  • Автор темы bzr
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

bzr

В задаче необходимо создать два объекта одного класса, который должен содержать строку. Обменять в строках первые слова. И вывести результат на экран.
Вот что у меня родилось:
C++:
#include <iostream>
#include <iomanip>
using namespace std;
#include <string.h>
class PL
{
char *Naz;
int Code;
int Sum;
public:
PL();
PL(char *N, int C, int S);
~PL();
PL(const PL& obj);
void vvod();
void show();
void recogFirst(char *first, char *last);
//	int max(MAS obj);
friend void exchng(PL ob1, PL ob2);
};

PL::PL()
{
Naz = new char[100]; 
//	Code = new (int);
//	Sum = new (int);
}
PL::PL(char *N, int C, int S)
{
Code=C;
Sum=S;
Naz=new char[strlen(N)+1];
strcpy(Naz,N);
}

PL::~PL()
{
delete[]Naz;
//delete Code;
//delete Sum;
}

void PL::vvod()
{
cout <<endl<< "Vvedite naaznachenie platega "<<endl;
cin >> Naz;
cout <<endl<< "Vvedite cod poluchatelya"<<endl;
cin >> Code;
cout <<endl<< "Vvedite summu platega"<<endl;
cin >> Sum;
}


void PL::show()
{
cout << endl <<Naz<<endl<<Code<<endl<<Sum;
}
void PL::recogFirst(char *first, char *last)
{
first=new char[strlen(Naz)+1];
last=new char[strlen(Naz)+1];
while (*(Naz)!='\0')
{
while (*(Naz)!=' ')
{
*first = *(Naz);
++Naz;
}
*last = *(Naz);
++Naz;
}
}

void exchng(PL ob1, PL ob2)
{
char *F1,*F2,*L1,*L2;
ob1.recogFirst(F1, L1);
ob2.recogFirst(F2, L2);
ob1.Naz = strcat(F2, L1);
ob2.Naz = strcat(F1, L2);
}

PL::PL(const PL& obj)
{
Naz=new char [strlen(obj.Naz)+1];
strcpy(Naz,obj.Naz);
Code=obj.Code;
Sum=obj.Sum;
}

/*
int MAS::max(MAS obj)
{
int rez=obj.mm[0][0];
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
if (obj.mm[i][j]>rez)
rez=obj.mm[i][j];
return rez;
}
*/

void main()
{
PL p1;
p1.vvod();
PL p2("Za uslugi svyazi", 287654, 35000);
cout << "Do izmemeniya \n Plateg #1: ";
p1.show();
cout<<"\n Plateg #2: ";
p2.show();
cout<<endl;
cout << "Posle izmemeniya \n Plateg #1: ";
exchng(p1,p2);
p1.show();
cout<< " \nPlateg #2: ";
p2.show();
cout<<endl;
}
 
B

bzr

Да нет извините!!! Не написала самого главного :) В общем что-то здесь не так((( Но меня мучают сомнения по поводу функции recogFirst Она ж ведь не сможет записать оставшуюся часть строки (без первого слова) в строку last??? И собственно вопрос: как сделать так, чтобы она туда записалась???
 
B

bzr

Допустим, у меня что более менее получилось... Но все же не то что хотелось :) Кто поможет разобраться с ошибкой? Выписывает в процессе работы программы, что используется неинициализированная переменная, хотя она инициализирована... У кого можно проконсультироваться?
 
K

Kotti

Вы передаете в функцию recogFirst неинициализированные указатели на char.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!