IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> с++ динамического массива увеличение
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


У меня в программке ошибка спотыкаюсь на 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;
}



--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


Мне задали сделать программку чтобы с файла брала только слова и считала сколько каких слов повторяется сделал с вектором

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
#define max 10000

string mas[max],mas1[max];
int i,a,j,s,su,x,y,mas2[max];

int main()
{
char t =0X0a; //eto enter
char cRai, st =' ' ;//eto probel xote mozno bila 0X20
string simb(",.?!/\()%$#;:|©-1234567890+-"); //simboli kotorije v tekste mogut prisutstvovat kotorii nenuzni
string word;
vector <string> iV;

a=0;
word ="";

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;
}
}

iV.push_back(word);

vector <string>::iterator iter;
vector <string>::iterator iter_sta;
vector <string>::iterator iter_end;


iter_sta = iV.begin();
iter_end = iV.end();

//cout <<"Zapixnul v vektor vot vektor" << endl; perepisivaem v masiv

i=0;
for (iter = iter_sta; iter < iter_end; ++iter)
{
// cout << *iter <<""<< endl;
i++;
mas[i] = *iter ;
}

// 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;
}


Одна ошибка там пустое место записывает
Сказали переделать вместо вектора сделать динамический массив чтобы меньше памяти использовала исправить ошибку и оптимизировать программу
ну я сделал вот так

#include <stdafx.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int i,a,j,s,su,x,y;//,mas2[max];

int main()
{
char t =0X0a; //eto enter
char cRai, st =' ' ;//eto probel xote mozno bila 0X20
string simb (",.?!/\()%$#;:|©-1234567890+-"); //simboli kotorije v tekste mogut prisutstvovat kotorii nenuzni
string word;
string *mas,ms;
a=0;
word ="";
j=0;
s=0;

ifstream fin2("mano.txt", ios::in);
while(fin2.good())
{
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 !=' ')
{
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;
}

//for (i=0; i<x;i++)
// cout<<mas[i]<<endl;

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;
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=""; }
}


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 18:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name