Софтуерно Инженерство
Loading...
+ Нов въпрос
Jordan_Dobrev12 avatar Jordan_Dobrev12 297 Точки

Съвети за първа задача от ООП - C++

Здравейте колеги , от липса на време още се мъча как да реша първа задача от ООП

Правя няколко неща накуп и ме затрудняват задачите , ако може малко помощ?

Как да отделя един масив ?

Примерно имам един стринг масив:

 

string text []  = {" SoftUni 3.0! Write C++ through 2017 year."};

 

Как да разделя текста от числата и char-овете ?

Искам да изкарам :

" SoftUni Write C++ through year "  - в стринг масив
" 3 0  2017 "като масив от числа
" !  .  "   като char масив

 

 

 

 

0
C++ Programming
Vladimir_Asenov_Vasilev avatar Vladimir_Asenov_Vasilev 13 Точки
Best Answer

Това не ти е условието на задачата. 
Ако имаш 1 9 34 56 73 12 -> да го изкараш като масив от числа.
Ако имаш "String1 String2 String3" -> да го изкарваш като масив от стрингове или масив от чарове.
Ако искаш да си го правиш сложно просто вземи един цикъл и обикаляй през входния стринг.
Когато срешнеш цифра с isdigit(char) влизаш в друг цикъл който следи колко последователни цифри имаш и ги правиш на число:
Да кажем: if( isdigit(input[index]) { int num = 0; while(isdigit(input[index]) { num *= 10; num += input[index] - '0'; input[index++] = ' ';} }.
Забележи, че замества цифрите със space. След това излизаш от този цикъл и правиш останалия input стринг на stringstream и просто чрез оператора >> вадиш следващия стринг. Ако стринга е с size() == 1 това е char и го слагаш в масив от чарове ако ли не в масив от стрингове.
Общо взето такива ми ти глупости.
Ако искаш може даже да си направиш стринг с дължина колкото входния. Да обикаляш с цикъл и да копираш числата и след това да ги извадиш със string stream.
Общо взето разбивай си задачата на под задачи.
1.Как да извядя само числата.
2.Как да извадя самотните букви.
3.Как да извася последователните букви

 

1
30/03/2017 22:02:01
v.krastev avatar v.krastev 54 Точки

здравейте!

отворена тема, с подходящо за въпроса ми заглавие, затова ще питам тук. за въпросната първа задача - какво се предполага, че трябва да прави метода "void changeLine(const string& line);". препрочитам условието пак и пак и не схващам какво се продполага че трябва да напиша, отговарящо на това име? вторият въпрос - някакви ограничения относно const и по-специално референциите с които очевидно може да декларираме конструктори (пак както е показано в условието)? да разбирам че все едно си е нормална функция и да си използвам референции, навсякъде където мога, с цел забързване на програмата?

Благодаря предварително!

1
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

На първия ти въпрос - changeLine просто сменя нещото, което LineParser-а parse-ва. Примерно ако имаш няколко реда числа, вместо да създаваш нов LineParser за всеки от тях, можеш да създадеш само един и да му казваш .changeLine() за всеки нов ред.

LineParser parser("1 2 3");
parser.getNumbers(); // ще даде int масив с елементи {1, 2, 3}
parser.changeLine("4 5 6");
parser.getNumbers(); // ще даде int масив с елементи {4, 5, 6}

На втория въпрос - методите трябва да са точно такива, каквито са в условието. Ако параметърът е const &, значи и при теб трябва да е така - какво ще правиш с така получения параметър в тялото на методите е твое решение. Идеята тук е както да упражните различните начини за работа с конструктори, референции и т.н., така и да сте подготвени ако ви се наложи да ползвате библиотеки, които имат такива изисквания (примерно в STL има изисквания за някои от параметрите на определени методи, когато искаш да ползваш твой клас с някой контейнер, например priority_queue).

Поздрави,

Жоро

1
v.krastev avatar v.krastev 54 Точки

дааа, има логика :D:D толкова време го мислех, а то е напълно логично, благодаря!

да, нов въпрос. още по време на лекцията, колега попита дали при обявяването на x(x) с двете точки преди бодито на конструктора може да използваме this->. жоро пробва и видяхме че даде някаква грешка и уточнихме че този this-> трябва да го използваме вътре във методите и конструкторите. НО, следната грешка: в самия клас, името на стринга който използвам (подавам към стринг стрийма) ми е "line". метода "void changeLine(const string& line);" има параметър "line", следователно ще е добра идея да използвам this->. НО, вътре в метода this->line = line; работи, докато line(line) и this->line(line) дава грешка. в демото предоставено от лектора примера си е с this->line=line (е, не е line, ами number, age и тн). въпроса ми е - когато използваме this->,      x(x) е невалиден синтаксис винаги или? и защо line(line) не работи вътре в тялото на този метод, но подобни присвоявания си работят при конструкторите, когато ги правим там с двете точки преди бодито?

ако не се разбира въпроса ми, кажете, не знам колко добре се изразих.

0
31/03/2017 20:54:12