Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массив из слов

629
31 марта 2002 года
TekiL
19 / / 20.09.2000
Короче не допру элементарную вещь. Нужно создать простой аррэй из ..слов, типа
имя[1]=Коля
имя[2]=Маша
имя[3]=Карбюратор
И что-то сильно всё это на с++ запутанно... Типа (данных) "стринг" не существует, поэтому создаю его
typedef char slovo[15];
после обьявляю массив
slovo name[5];

не пашет.
пишет cannot convert from 'char [5]' to 'char [15]'
если сделать
name[1]="TekiL";
cout<<endl<<name[1];


как правильно такое замутить??
спасибо

зы хуже всего что потом нужно будет делать что-то вроде Рост[имя[1]]=190.. совсем мозги плавятся...

[ Это Сообщение было отредактировано TekiL в 2002-03-31 1736 ]
380
01 апреля 2002 года
Arestov
285 / / 20.09.2000
char *ppszWords[] ={
&quot;Коля&quot;, &quot;Маша&quot;, &quot;Карбюратор&quot;, NULL
};
int cWords = sizeof(ppszWords)/sizeof(ppszWords[0]);

при этом cWords будет равно 3

for (int i=0; i<cWords; i++) cout<<ppszWords;

или
i = 0;
while(ppszWords) cout<<ppszWords;

но тебе это не поможет, контейнеры типа Рост[имя[1]] = 190см называются dictionary(словарь) и простым массивом строк не обойтись. это всётаки C++ а не VB

Для начала попробуй сделать что-то типа этого

struct PEOPLE
{
int nAge, nWeight, nHeight;
char*pszName;
bool bUsed;
};

class CPeoples
{
int m_cPeoples;
PEOPLE m_tPeoples[120];
...
public
bool Add(const PEOPLE&amp; rPeople);
bool Remove(int i);
bool RemoveByName(int i);
...
PEOPLE *GetByName(const char*pszName)
{
PEOPLE *p = m_tPeoples;
for (int i=0; i<120; i++, p++)
{
if (p->bUsed)
{
if (strcmp(p->pszName, pszName)==0)
return p;
}
}
return NULL;
}
PEOPLE *operator[](const char*pszName)
{
return GetByName(pszName);
}
...
};

тогда
CPeoples pc;
..
pc.Add(....);
pc.Add(....);
...
PEOPLE *p = pc[&quot;Маша&quot;];
p->nHeight = 190;

P.S. Я писал прямо в постинг и ничего не проверял, возможно наличие опечаток и прочей ерунды.
629
01 апреля 2002 года
TekiL
19 / / 20.09.2000
Цитата:

On 2002-04-01 0009, Arestov wrote
char *ppszWords[] ={
&quot;Коля&quot;, &quot;Маша&quot;, &quot;Карбюратор&quot;, NULL
};
int cWords = sizeof(ppszWords)/sizeof(ppszWords[0]);

при этом cWords будет равно 3

for (int i=0; i<cWords; i++) cout<<ppszWords;

или
i = 0;
while(ppszWords) cout<<ppszWords;

но тебе это не поможет, контейнеры типа Рост[имя[1]] = 190см называются dictionary(словарь) и простым массивом строк не обойтись. это всётаки C++ а не VB

Для начала попробуй сделать что-то типа этого

struct PEOPLE
{
int nAge, nWeight, nHeight;
char*pszName;
bool bUsed;
};

class CPeoples
{
int m_cPeoples;
PEOPLE m_tPeoples[120];
...
public
bool Add(const PEOPLE&amp; rPeople);
bool Remove(int i);
bool RemoveByName(int i);
...
PEOPLE *GetByName(const char*pszName)
{
PEOPLE *p = m_tPeoples;
for (int i=0; i<120; i++, p++)
{
if (p->bUsed)
{
if (strcmp(p->pszName, pszName)==0)
return p;
}
}
return NULL;
}
PEOPLE *operator[](const char*pszName)
{
return GetByName(pszName);
}
...
};

тогда
CPeoples pc;
..
pc.Add(....);
pc.Add(....);
...
PEOPLE *p = pc[&quot;Маша&quot;];
p->nHeight = 190;

P.S. Я писал прямо в постинг и ничего не проверял, возможно наличие опечаток и прочей ерунды.







ого! ))
айм ин шок типа! )
вообще-то я уже гораздо проще сделал

int main() {
char nom_mat[20][15]; //названия предметов (максимум 20 штук по 15 литер)
int m=0;
int x=0;
int y=0;
int note[20][15];
int num[20];
int somme[20];
double moyenne[20]; //всякая остальная фигня




//-----
cout<<&quot;Introduisez nom matiere (&quot;<<m+1<<&quot;) -- &quot;;
cin.getline(nom_mat[m], 15, '\n');
m++;
} while (nom_mat[m-1][0]!=' ');
m-=1;
//вводим по одноиу названия предметов (остановка - пробел)


//-----
for (x=0; x<m; x++)
{
do {
cout<<&quot;Introduisez la note (&quot;<<nom_mat[x]<<&quot;)(&quot;<<y+1<<&quot;) -- &quot;;
cin>>note[x][y];
y++;
} while (note[x][y-1]<=20);
num[x]=y-1;
y=0;
}
//вводим по одной все наши двойки для каждого предмета (по очереди типа) (остановка - оценка > 20. потом с пробелом сделаю нормально...)

//-----
for (x=0; x<m; x++)
{
somme[x]=0;

for (y=0; y<num[x]; y++)
somme[x]=somme[x]+note[x][y];

moyenne[x]=somme[x]/num[x];
}
//считаем среднюю для каждого предмета

как видешь ни булей ни пойнтеров (хотя можно было-бы обойтись меньшим кол-вом переменных. но гемморойнее)
зы у меня тут вариабла moyenne типа double, но при делении (например) 13 на 4 выдаёт 3.0000000 (с такой блин точностью и неправильно)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог