1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
У меня в программке ошибка спотыкаюсь на mas[j-1]="privet"; Надо написать программку чтобы динамическая массив постоянно увеличивался на 1 и записывался в ячейку сразу данные а у меня чего то не выходит наверное неправильно рассчитал
вот сама программка
#include <stdafx.h> #include <string> #include <iostream> using namespace std; int main() { cout<<"test"<<endl; int i,j; j=0; string *mas,*ms; for(i=0; i<50;i++) { j++; if (j ==1) { mas =new string [j]; mas[j-1]="0"; } cout<<"j = "<<j<<endl; if (j>1) { ms = new string [j-1]; ms=mas; mas =new string [j]; mas=ms; cout<<"mas ["<<j-2<<"] = "<<mas[j-2]<<endl; mas[j-1]="privet"; //cout<<mas[j-1]<<endl; } } cout<<"ppppppppppppp"<<endl; //for (i=0; i<=j; i++) cout<<"mas = "<<mas<<" i = "<<i<<" j = "<<j<<endl; cout<<"end"<<endl; return 0; }
--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
Я знаю что вектор предназначен для этого но сказали сделать без вектора чтобы меньше ресурсов кушала
--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
Кто тебе сказал, что вектор - это много ресурсов? Вообще-то это все очень хорошо оптимизировано, и превзойти стандартные алгоритмы/структуры тебе вряд-ли удастся. И по скорости и по ресурсам. Тем более, когда ты работаешь с классом std::string - лучше предоставить это вектору, чем химичить что-либо самому. Но дело твое: хочешь велосипед - делай...
ifstream fin2("mano.txt", ios::in);//citaem po odnomu simbolu i delaem slovo vikidivaem vse lisnee while(fin2.good())//zapisivaem v vektor { cRai = fin2.get(); if(fin2.good())
{ for ( i=0; i<=26; i++) { if (cRai == simb[i]) a++; } if (a == 0) if (cRai !=t) if (cRai != '"') if (cRai !=' ') { word+=cRai; } if (cRai == st) { iV.push_back(word); word = ""; } if (cRai ==t) { iV.push_back(word); word = ""; } a=0; } }
// cout<<"+++++++++++++masive++++++++++++"<<endl; //cout<<i<<endl; // sortiruem slova for ( j = 1; j<=i; j++) for (a = j+1; a<=i; a++) if (mas[j]>mas[a]) { word = mas[j]; mas[j]=mas[a]; mas[a]=word; }
ofstream fin1("rez.txt", ios::out); fin1<<"Slova povtorialis"; fin1<<endl; //smotrim skolko slov napisano gde i vivodim daze esli slovo tolko v odnom meste s=1; for ( j = 1; j<=i-1; j++) { for (a = j+1; a<=i; a++) { if (mas[j] == mas[a]) su++; }
fin1<<" slovo "<<mas[j]<<" naxoditsia v "<<su+1<<" mestax"; fin1<<endl; j=j+su; su=0; } fin1.close(); fin2.close(); return 0; }
Одна ошибка там пустое место записывает Сказали переделать вместо вектора сделать динамический массив чтобы меньше памяти использовала исправить ошибку и оптимизировать программу ну я сделал вот так
{ for ( i=0; i<=26; i++) { if (cRai == simb[i]) a++; } if (a == 0) if (cRai !=t) if (cRai != '"') if (cRai !=' ') { s++; word+=cRai; } if (cRai == st) { j++; s++; ms=ms+word+" "; word = ""; } if (cRai ==t) { j++; s++; ms=ms+word+" "; word = ""; } a=0; } } j++; s++; ms=ms+word+" "; word=""; //cout<<ms<<" j ="<<j<<endl;
mas = new string [j];
//cout<<s<<endl; x=0; for (i=0;i<s;i++) { if (ms[i] != st) word=word+ms[i]; if (ms[i] == st) { mas[x]=word; x++; word=""; } }
// cout<<"+++++++++++++masive++++++++++++"<<endl; //cout<<i<<endl; // sortiruem slova for ( j = 1; j<x; j++) for (a = j+1; a<x; a++) if (mas[j]>mas[a]) { word = mas[j]; mas[j]=mas[a]; mas[a]=word; }
////smotrim skolko slov napisano gde i vivodim daze esli slovo tolko v odnom meste //s=1; su=1; for ( j = 1; j<x-1; j++) { for (a = j+1; a<x; a++) { //cout<<mas[j]<<" "<<mas[a]<<" j = "<<j<<" a = "<<a<<endl; if (mas[j] == mas[a]) su++; else a=x; }
fin1<<" slovo "<<mas[j]<<" naxoditsia v "<<su<<" mestax"; fin1<<endl; j=j+su; su=1; } if (mas[x-2] != mas[x-1]) fin1<<" slovo "<<mas[x-1]<<" naxoditsia v "<<su<<" mestax"; fin1<<endl; fin1.close(); fin2.close(); return 0; }
и теперь хотел избавится от одного цикла
for (i=0;i<s;i++) { if (ms[i] != st) word=word+ms[i]; if (ms[i] == st) { mas[x]=word; x++; word=""; } }
--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
Сказали переделать вместо вектора сделать динамический массив чтобы меньше памяти использовала
Чтоб программа использовала меньше памяти - надо не описывать массивы так:
#define max 10000 string mas[max],mas1[max];
, а использовать для хранения строк те же векторы, или еще лучше - map какой-нибудь. Не надо делать смесь чистого С и С++, ни к чему хорошему это не приводит. Если уж пишешь программу на С++ - так используй его библиотеки.
Ого а я думал что С не знаю так как его не проходил а о map я первый раз слышу
Добавлено через 7 мин. А ведь в паскале можно увеличивать динамический масив
--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
Если интересно - вот решение задачи (если я правильно понял, тебе надо разбить текст файла на слова, удаляя все "ненужные" символы, и посчитать, сколько раз каждое слово встречалось?)
struct is_sym: public std::unary_function<char, bool> { public: // Это работает только с латинскими символами, но переделать // на любые другие - не проблема, добавится еще пара строк... bool operator ()(char ch) const { return !isalpha(ch); } };
realloc - это С-стиль. При работе с POD-типами все ясно и понятно. Но при работе с классами (а у автора здесь именно классы используются, std::string например) можно такого наворотить, что не разгребешь потом.
Получается, надо писать обертку над realloc-ом, которая будет работать с классами корректно. И придумывать свой std::vector. Оно надо?