Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
Явно не ми е ясна задачата.
Според мен първата функция прави масив инт и вика втората функция която попълва масива инт с позициите на форматиращите символи и след връщането от нея гледа позициите в инт масив ги замества в стринга от стринг масива и вече тука има 2 масива с еднакви имена.
стринг и инт. Това ми е проблема.
На мен лично втората функция ми е съвсем излишна и усложнява кода.
Задачата е да направиш един клас, който приема един стринг, и после - като извикаш една от тези функции - замества в този стринг определени части с елементите от масивите. Функциите не правят никакви масиви, те приемат масиви. И класът се казва StringFormatter, съответно ще прави нещо свързано с формата на един стринг. Тоест класът прави нещо подобно на printf от C, а ако си писал примерно на C#, String.Format() прави нещо подобно, на Java също, на JavaScript също има подобен аналог, на PHP sprintf отново върши подобна работа.
Виж примера, който показва как се ползва обект от класа в задачата. Ако напишеш класа вярно, тогава примерния код трябва да даде точно резултатът, който е описан в коментара.
Това ми е ясно. Програмката ми работи с променено име на двата масива.
formatter.format(new string[]{"Ben Dover", "Totally Legit NonSpam Ltd","13", "Leva"}, 4);
Това не ми работи, дава грешка и първо присвоявам на променлива и тогава подавам.
error: too many initializers for 'std::__cxx11::string [1] {aka std::__cxx11::basic_string<char> [1]}'|
Да, сега видях, че съм написал параметъра java-style. Правилно си се сетил да го присвоиш на някаква променлива и след това да я подадеш:
Така вече трябва да ти работи вярно - теб кое те притеснява в имената на параметрите? Името, с което е дефиниран параметъра във функцията не е нужно да съвпада с името на параметъра, с който се вика.
Edit: бях написал formatter.format(formats, 4); вместо formatter.format(inserts, 4);
Edit 2: и със стария синтаксис ще работи, но трябва да му кажеш размера на масива, който инициализираш:
new string[4]{"Ben Dover", "Totally Legit NonSpam Ltd", "13", "Leva"}
... обаче това би оставило един масив в динамичната памет, който не е изтрит и му нямаме адреса - трябва или format метода да го изтрие като приключи (което е малко особено, защото масивът е инициализиран извън format, тоест по-скоро трябва да се изтрие също извън format), или да запазиш pointer към него (за да може после да го delete[]-неш) и да подадеш pointer-а на функцията, което възлиза на същия брой редове код
и аз получих същата грешка за too many initalizers, както обяснява жоро се оправи.
въпросите са ми следните - 1. за какво е параметърът int insertArrSize който трябва да подаваме на двата format метода? предполагам не е проблем методите ми да не искат втори параметър освен масва, нали?
2. фнкцията ми е следната (не използвам int insertArrSize, за това и не съм го ообявявал). самата функция си работи, търся помощ как да използвам двете полета от класа във метода му.
защо не мога да направя този метод без да се налага изобщо да подавам въпросните два параметъра отвън (както е по условие)? ако метода ми има само масива от стрингове за параметър, output-а не е никакъв, нищо не става. пробвах навсякъде пред stringToFormat и formatPrefix да сложа this->, пробвах this-> да го няма никъде, и в двата случая не се получава.... PS: stringToFormat и formatPrefix са имената на полетата в класа ми, затова очаквах this-> да работи. обявил съм ги private и си ги въвеждам нормално с конструктор. нищо никъде не е константа и т.н. предложения от някого?
#include<iostream>
#include<string>
using namespace std;
class StringFormatter
{
private:
string formatPrefix;
string *stringToFormat;
public:
StringFormatter(string& stringToFormat, const string& formatPrefix)
{ this->stringToFormat=&stringToFormat;
this->formatPrefix=formatPrefix;
}
public:
void format(string insertArr[])
{
short int counter = 0;
string toFind = formatPrefix+to_string(counter);
while((*stringToFormat).find(toFind)!=string::npos)
{
(*stringToFormat).replace((*stringToFormat).find(toFind), formatPrefix.size() + toFind.size() - 2, insertArr[counter]);
counter++;
toFind = formatPrefix+to_string(counter);
}
}
}; //class
int main()
{
string s = "Dear *:0, Our company *:1 wants to make you a Donation Of *:2 Million *:3 in good faith. Please send us a picture of your credit card";
StringFormatter formatter(s, "*:");
string p[4] {"Ben Dover", "Totally Legit NonSpam Ltd","13", "Leva"};
formatter.format(p);
cout<<s;
}