Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Составление списков
 
 автор: bronenos   (07.04.2007 в 20:07)   письмо автору
 
 

Правильно ли я понимаю, что аналог этого
<?php
$users = array();

function add_user ($nick, $pswd, $email)
{
  global $users;
  $users[] = array (
    'nick' => $nick,
    'pswd' => $pswd,
    'email' => $email
  );
}
?>

может выглядеть следующим образом
#include <string.h>
struct user { string nick, pswd, email; };
user users[100];

void add_user (nick, pswd, email)
{
  user add;
  add.nick = nick;
  add.pswd = pswd;
  add.email = email;
  users[] = add;
}

по мне все правильно... а ругается...
что не так? я заметил что он не понимает []...

  Ответить  
 
 автор: alex19921992   (07.04.2007 в 20:27)   письмо автору
 
   для: bronenos   (07.04.2007 в 20:07)
 

Правильно! Ты ж не сказал ему во-первых, какому элементу массива юзерс функция присваивает значения: нулевому? 99-му? 50-му? поэтому в квадратных скобках указывай номер эл-та массива.
Также нельзя просто присваивать строке значение. есть strcpy(add.nick,nick); - это присваивание строки.
Также при вызове функции не указан тип параметров. nick, pswd, email - это числа? строки? а может дескрипторы?
Сначала исправьте это. Потом, если не будет работать, попробуйте строку users[] = add; - присваивание структур заменить присвоением поэлементно в несколько действий(точно не помню, можно ли структуры присваивать).

  Ответить  
 
 автор: bronenos   (07.04.2007 в 20:53)   письмо автору
 
   для: alex19921992   (07.04.2007 в 20:27)
 

эт я просто писал не копировал
так у меня стоят типы
void add_user (string nick, string pswd, string email)
вопрос как добавлять в массив
[] в PHP означает добавить в массив еще один элемент с ключом на 1 больше предыдущего... здесь, я полагаю, нет... а как тогда? вот этот вопрос подразумевался под этим топиком

насчет структур
массив имеет тип структуры
насколько я понял каждый его элемент имеет теперь такой же тип
значит можно

  Ответить  
 
 автор: alex19921992   (07.04.2007 в 21:01)   письмо автору
 
   для: bronenos   (07.04.2007 в 20:53)
 

А тут, батенька, надо список писать. Можно конечно массивом обойтись,но надо будет каждый раз его удалять и заводить новый эл-т.
Сам я списки мало писал и советовал бы вам изучать С++ с самого начала, а не браться за списки сразу.

Вообще, в С++, массивы иеют ограниченную длину. Если вам надо увеличить массив, вы его удаляете и заводите пустой с большим количеством элементов.

Если списки уж так нужны, поищите готовые примеры в интернете,так как я могу очень неточно написать, да и если напишу, у вас будет очень много вопросов, я думаю...

  Ответить  
 
 автор: bronenos   (07.04.2007 в 23:07)   письмо автору
 
   для: alex19921992   (07.04.2007 в 21:01)
 

не хочу использовать списки, мне массив структур подходит для моих целей
в принципе я сейчас так и сделал, храню число записей в переменной и в случае нехватки создаю новый...
но неужели нет методов никаких для вставки значения, как в JavaScript: list.push(item) ?

  Ответить  
 
 автор: alex19921992   (08.04.2007 в 05:13)   письмо автору
 
   для: bronenos   (07.04.2007 в 23:07)
 

Нет, увеличить массив можно удалив его и создав новый.

  Ответить  
 
 автор: bronenos   (08.04.2007 в 09:36)   письмо автору
 
   для: alex19921992   (08.04.2007 в 05:13)
 

да нет же!
допустим я объявил user users[100];
на 100 пользователей
в данный момент занято допустим 57, я могу поместить еще 43
и оператором [] хочу добавить 58го в общий список
при чем тут увеличить?

  Ответить  
 
 автор: alex19921992   (08.04.2007 в 16:12)   письмо автору
 
   для: bronenos   (08.04.2007 в 09:36)
 

Так можно. Но будет ограничение на кол-во эл-тов в мкассиве(100)
Тебе надо завести переменную, обозначающую, сколько ячеек у тебя занято в массиве. Пусть это i и оно равно 57 чтоб добавить нов. эл-то надо:
проверить, есть ли еще место в массиве if(i<99){}
если нет, то ниче не добавлять. если да, то увеличиваем i на 1, и записываем эл-т в массив.
в итоге получаем:

if(i<99)
{
i++
//добавляем запись в массив[i]
}

  Ответить  
 
 автор: bronenos   (08.04.2007 в 16:59)   письмо автору
 
   для: alex19921992   (08.04.2007 в 16:12)
 

в принципе я так и сделал
а нельзя ли сделать вроде этого
предупреждаю, что не гарантирую безошибочность, просто изложение мысли

string& operator[] (const string insert)
{
  if (size >= sizeof(this)) return;
  this[size] = insert;
  size++;
}

  Ответить  
 
 автор: alex19921992   (08.04.2007 в 18:28)   письмо автору
 
   для: bronenos   (08.04.2007 в 16:59)
 

Я не понимаю ваш код, в частности, слово тхис, лучше скажите, что он должен делать или предполагаемый механизм его действия

  Ответить  
 
 автор: bronenos   (08.04.2007 в 18:56)   письмо автору
 
   для: alex19921992   (08.04.2007 в 18:28)
 

заводится внутренний счетчик элементов
при добавлении через [] проверяется количество элементов и вместимость массива
если все в порядке то добавляется ключ со значением и счетчик++
уж очень хочется этот механизм использовать как в пхп...

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

  Ответить  
 
 автор: oleg_alexeev   (08.04.2007 в 19:00)   письмо автору
 
   для: bronenos   (08.04.2007 в 16:59)
 

Вы пытаетесь сделать так, чтобы программа на С++ была похожа на программу на PHP. Этот подход неэффективен. На другом языке надо писать, пользуясь стилем этого другого языка.
Опыт программирования на PHP, по-моему, плохой помошник при освоении С++. А хорошими помошниками были бы знание архитектуры компьютера, ассемблера и С. Советую пойти этим путем. Это долго, но это единственный способ научиться писать хорошие программы на С++.

  Ответить  
 
 автор: bronenos   (08.04.2007 в 19:15)   письмо автору
 
   для: oleg_alexeev   (08.04.2007 в 19:00)
 

в данном случае проблема иная
в стандартном массиве не предусмотрено средств для вставки данных
или [] или .push()
и приходится отдельно хранить в лучшем случае число

ладно, я понял что пытаюсь сделать адаптацию алгоритма.. но то что я пытался сделать с оператором... этого не осуществить?

видно это последний мой вопрос в данной теме

  Ответить  
 
 автор: oleg_alexeev   (08.04.2007 в 20:35)   письмо автору
 
   для: bronenos   (08.04.2007 в 19:15)
 

Сделать добавление в стиле PHP не получится. Но у стандарного класса std::vector есть удобный метод, похожий на то, что Вам нужно - push_back() (добавляет элемент в конец массива и, если надо, увеличивает размер массива):

#include <string>
#include <vector>
struct user { std::string nick, pswd, email; };
std::vector<user> users;

void add(std::string &nick, std::string &pswd, std::string &email)
{
    user u;
    u.nick = nick;
    u.pswd = pswd;
    u.email = email;
    users.push_back(u);
}

  Ответить  
 
 автор: bronenos   (08.04.2007 в 21:31)   письмо автору
 
   для: oleg_alexeev   (08.04.2007 в 20:35)
 

пара вопросов
1. в квадратных скобках указывается имя структуры... а только имя структуры можно задавать?
2. почему в функцию передается у вас ссылка
надо число копировать значения ведь

  Ответить  
 
 автор: bronenos   (08.04.2007 в 21:44)   письмо автору
 
   для: oleg_alexeev   (08.04.2007 в 20:35)
 

пара вопросов
1. в квадратных скобках указывается имя структуры... а только имя структуры можно задавать?
2. почему в функцию передается у вас ссылка
надо число копировать значения ведь

  Ответить  
 
 автор: alex19921992   (09.04.2007 в 04:50)   письмо автору
 
   для: bronenos   (08.04.2007 в 21:44)
 

В квадратных скобках указывается номер элемента массива

  Ответить  
 
 автор: bronenos   (09.04.2007 в 14:03)   письмо автору
 
   для: alex19921992   (09.04.2007 в 04:50)
 

Интересно, могу ли я, теоретически, вооружившись достаточным количеством знаний, написать свой класс для организации массивов, чтобы был и внутренний счетчик занятых элементов, и счетчик вместимости, и операции вставки в конец, в начало и т. д. в виде методов?

  Ответить  
 
 автор: alex19921992   (09.04.2007 в 14:48)   письмо автору
 
   для: bronenos   (09.04.2007 в 14:03)
 

на с++ все можно

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования