Задача 8 от лекция 2
Здравейте, тотално забих на задача 8, може ли някакви насоки към решението на задачата?
Засега имам функция която уж проверява string-а за числа..
int parseNumbers(string& str, int& resultLength)
{
int number = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ') //If theres space
{
str[i + 1] = number += std::stoi(str);
}
}
return number;
}
Това което се опитвам да направя е да записвам number в масив, на прав път ли съм?
Здравей, благодаря за бързия отговор!
То какви начини имало, а аз в какви филми се вкарвам! :D
А ето, че се вкарах в още един:
Получавам compile error: Error LNK2001 unresolved external symbol "int * theArray" (?theArray@@3PAHA)
Тя се предизвиква от " sumOfArray += theArray[j]; "
Няколко неща ти пречат тук:
1) въвеждаш в myArray, пък се опитваш да събираш елементите на theArray (btw това не са много добри имена - my и the са ти ненужни, защото всички arrays в твоята програма са "my" по принцип :D и това най-вероятно те е объркало, ако ги беше кръстил примерно localArray и globalArray веднага щеше да забележиш, че записваш в едното пък сумираш другото Edit: localArray и globalArray също не са прекрасни имена, ама са по-добри от my и the)
2) Какво става, ако броят елементи е по-голям от 10? myArray е само 10 елемента. Това с arraysize трябва да го направиш първо, само че не въвеждай в масив а просто в някаква dummy променлива, колкото да преброиш елементите. След това направи myArray[arraySize] и направи нов stringstream по str и чак тогава въведи елементите, както ти ги въвеждаш (така вече знаеш, че myArray ще е достатъчно голям)
3) Това, което ти дава грешка, е че си декларирал глобален масив, без да му кажеш размер и без да му дадеш инициализация - int theArray[]; За C++ това означава "тук има ще един масив от int, на който по-късно ще му дам размер или ще го инициализирам, засега само казвам, че ще го има някъде из кода" (може да погледнеш в лекцията за функции - правихме нещо подобно с разделянето на декларация и дефиниция на функция) - но ти никога не му даваш размер и затова компилатора ти казва "абе тука ми казаха, че ще има един масив, ама го няма" (linker error). Предполагам, че си искал да напишеш int theArray[100]; примерно, което вече означава "създай един масив от 100 int елемента"
Поздрави,
Жоро
Първо благодаря за отделеното време, че то вече стана доста занимавка с мен.
Това с грешката беше, че ползвам масив който изобщо не трябва да го има в програмата, но е останал от преди когато съм се опитвал да замажа нещата да работят :D
В момента събирам елементите по следния начин:
Но не намирам начин как да направя масива, ако се опитам да го направя след while цикъла по следния начин int myArray[arraysize]; , казва че arraysize трябва да е const, което не е нищо изненадващо. Ако се опитам да направя някакъв const int, който е равен на arraysize казва че отново не е const..
За сега това решение работи:
Но така не се следва условието на задачата, също така resultLength не се използва..
Странно е защо не ти се компилира с не-константен размер, най-вероятно си с компилатор, който не е настроен да го разрешава. Но на теб така и така не ти трябва такъв размер - трябва ти динамично заделен масив, тоест масив заделен с new.
Тоест вместо да правиш int myArray[arraysize];, трябва да направиш int * myArray = new int[arraysize]; - това със сигурност ще работи и оттам нататък можеш да пишеш в myArray все едно си е нормален масив. Ако видиш условието на задачата, тя очаква функцията ти да върне точно такъв масив. След това в main правиш един for цикъл за всеки един ред, генерираш си масив с тази функция, смяташ му сумата (условието изисква да не смяташ сумата във функцията, а функцията ти да връща масив, който вече можеш да го обработиш както искаш от друг код) и продължаваш нататък. Не забравяй да delete[] резултата от функцията след го използваш в main.
За да използвам return стойноста в main трябва да нарпавя масив? Който да бъден = на фунцкията? И още един въпрос: Функцията трябва да връща return myArray; или return &myArray[];
По-конкретно трябва да направиш pointer към масив - това връща и parse numbers
По условие: int * parseNumbers(...), значи резултатът е int *, за да го ползваш казваш int * parsed = parseNumbers(...), ползваш parsed като масив (примерно сумираш) и накрая delete[] parsed; за да освободиш паметта
Благодаря ти страшно много!
Ето това успях да напиша, остава resultLength, който не се използва никъде? между другото програмата работи но ми дава exception.