The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Учебная задача по С++"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Учебная задача по С++"  
Сообщение от Dmitriy (??) on 14-Мрт-08, 14:44 
Приветствую всех!

не пинайте сильно если глупости спрошу, начал С++ изучать столкнулся с непонятностями.
подскажите пожалуйста можно ли строку состоящую из нескольких слов, разделённых запятыми или побелами, введённую с помощью gets разбить на отдельные слова и сохранить эти слова в разнве переменные для последующего анализа например на предмет наличия слов не содержащих гласных букв: если можно то какими функциями и из какого пакета?

и вотрой вопрос - есть шаблон структуры "Государство - наименование, столица, численность и площадь" - написал свою функцию для формирования экземпляра структуры что бы очередной экземпляр вносился при помощи этой функции

int i;
struct empire{char name[],capital[]; int public,area;}
empire str[];

for (i=0;i<10;++i){
str=state(i)
}

char state(i){
cout << "ввести название"; cin >> str.name;
cout << "ввести столицу"; cin >> str.capital;
cout << "ввести население"; cin >> str.public;
cout << "ввести площадь"; cin >> str.area;
return ХЗ
}  

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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Учебная задача по С++"  
Сообщение от anonymous (??) on 14-Мрт-08, 14:54 
Основная проблема у тебя на текущий момент -- абсолютное непонимание того, что такое указатель, как и кем выделяется память, и как работают строки в Си.  Возьми обычного Кернигана и Ритчи "Язык программирования Си" и прочитай там главу про указатели.  Потом снова посмотришь на свой код.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Учебная задача по С++"  
Сообщение от anonymous (??) on 14-Мрт-08, 14:56 
Да, и ещё: если сразу захотел изучить C++ "наскоком", то не выйдет.  Лучше изучи сначала чистый Си.  При регулярной ежедневной работе по тому же Кернигану и Ритчи это займёт максимум три-четыре недели.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Учебная задача по С++"  
Сообщение от primus on 14-Мрт-08, 15:36 
>>Лучше изучи сначала чистый Си.  

Ни в коем разе.
Только чистый С++.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Учебная задача по С++"  
Сообщение от anonymous (??) on 14-Мрт-08, 17:29 
>>>Лучше изучи сначала чистый Си.  
>
>Ни в коем разе.
>Только чистый С++.

Почему же вдруг?  Хотя наверное знаю: редко в какой книге будет написано, что C++ это не Си, и тут думать надо по-другому...

Но извините, если не понимать указателей, то в C++ по-любому рано ещё.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Учебная задача по С++"  
Сообщение от DeadMustdie email(??) on 18-Мрт-08, 21:38 
>Но извините, если не понимать указателей, то в C++ по-любому рано ещё.

Изучение чистого C крайне вредит пониманию C++.
Хотя изучать C++ как первый язык программирования очень непросто.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Учебная задача по С++"  
Сообщение от anonymous (??) on 18-Мрт-08, 23:01 
>>Но извините, если не понимать указателей, то в C++ по-любому рано ещё.
>
>Изучение чистого C крайне вредит пониманию C++.

Только при условии, что преподаватель забьёт на всё не будет говорить "а вот так в C++ не делают, есть вот такие-то и такие-то средства".  Хотя это настолько часто встречается... Учат писать на C++ в процедурном стиле, причём из C++'ных возможностей используют только cin и cout.

В принципе, с таким же успехом можно говорить что изучение паскаля вредит пониманию ООП.  Главное чтобы преподаватель акцентировал внимание на том, что C++ это не просто Си со свистелками в виде классов, это другой язык.  Похож только синтаксис.

>Хотя изучать C++ как первый язык программирования очень непросто.

Согласен.  А Си очень важен для понимания принципов работы машины.  Те же указатели.  Строки.  Память.  Автоматические и глобальные переменные.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Учебная задача по С++"  
Сообщение от phpcoder email(??) on 14-Мрт-08, 15:04 
[...]
>подскажите пожалуйста можно ли строку состоящую из нескольких слов, разделённых запятыми или
>побелами, введённую с помощью gets разбить на отдельные слова и сохранить

Можно. Для этого используйте ф-ции типа find() и в вектор добавляйте. (В Java, кажется, для этого есть что-то готовое..)

И это, забудьте про gets(), он, во-первых, дырявый, во-вторых, он для Си, а не для С++.

[...]
>собственно вопрос в том как вернуть из подпрограммы все эти значения для
>одного экземпляра структуры [...]

- Возвращайте из ф-ции указатель
- используйте std::string вместо char arr[]
- используйту getline() для считывания строк из стандартного ввода


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Учебная задача по С++"  
Сообщение от Dmitriy (??) on 14-Мрт-08, 16:14 
toanonymous
K&R нету и быстро взять негде, но есть С.Прата там нужного примера нету но что то близкое к тому есть. Да просто С тоже пытаюсь поднять.

toprimus
а почему только С++?
тут вроде как в школе учат что С++ это надстройка над С с возможностью объектного программирования + несколько функций добавлено
или обманывают?

tophpcoder
пасибо большое,

т.е. получается без указателей задача не решается?
да кстати вместо gets нельзя ничего использовать в противном случае эта учебная задача будет считаться решённой неверно :( c gets - пока глухо получается
а с указателями будет примерно так?

int i;
struct empire{char name[],capital[]; int public,area;}
empire str[10];
char p=&str[10];

for (i=0;i<10;++i){
str=state(char *p,int i)
}
char state(char *p,int i){
cout << "ввести название"; cin >> *(p+i).name;
cout << "ввести столицу"; cin >> *(p+i).capital;
cout << "ввести население"; cin >> *(p+i).public;
cout << "ввести площадь"; cin >> *(p+i).area;
}  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Учебная задача по С++"  
Сообщение от phpcoder email(??) on 14-Мрт-08, 16:27 
[...]
>тут вроде как в школе учат что С++ это надстройка над С
>с возможностью объектного программирования + несколько функций добавлено
>или обманывают?

Многие так и пишут и даже так думают. Это уже давно не так.

[...]
>т.е. получается без указателей задача не решается?

Как правило, нет. Можно выделять память в куче (с помощью new) и возвращать этот указатель (и потом не забыть вызвать delete для него). Либо возвращать указатель на статически выделенную память. Либо передать указатель в ф-цию и она уже будет сразу создавать где надо. Либо.. можно, кажется, вернуть прям так структуру. Но так почти никто не делает, чтобы стек не раздувать.

>да кстати вместо gets нельзя ничего использовать в противном случае эта учебная
>задача будет считаться решённой неверно :(

BUGS
       Never  use  gets().   Because it is impossible to tell without knowing the data in
       advance how many characters gets() will read, and because gets() will continue  to
       store characters past the end of the buffer, it is extremely dangerous to use.  It
       has been used to break computer security.  Use fgets() instead.

И вообще: "LSB deprecates gets()."

>получается
>а с указателями будет примерно так?
>
>int i;
>struct empire{char name[],capital[]; int public,area;}

Почему не используете std::string вместо массивов?

Ладно, раз уж хотите их использовать (Я ПРЕДУПРЕЖДАЛ!), так используйте правильно:

char name[] <-- это что? Кто будет размерность указывать?!


>char p=&str[10];

char p -- это вы создали один символ.

Кроме того, не надо обращаться к str[10] -- такого элемента нет. ЭТО ОШИБКА! Последний элемент имеет индекс 9!

>for (i=0;i<10;++i){
>str=state(char *p,int i)
>}
>char state(char *p,int i){
>cout << "ввести название"; cin >> *(p+i).name;
>cout << "ввести столицу"; cin >> *(p+i).capital;
>cout << "ввести население"; cin >> *(p+i).public;
>cout << "ввести площадь"; cin >> *(p+i).area;
>}

Таааак. Вы это хотя бы компилировать пробовали?! Тут ошибка на ошибке...

И вместо *(p+i) пишите p для удобства чтения кода.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Учебная задача по С++"  
Сообщение от anonymous (??) on 14-Мрт-08, 17:37 
>toanonymous
>K&R нету и быстро взять негде, но есть С.Прата там нужного примера
>нету но что то близкое к тому есть. Да просто С
>тоже пытаюсь поднять.

Да простят меня все присутствующие.  Держи книгу: http://rapidshare.com/files/99483248/kr.zip.html

>а почему только С++?
>тут вроде как в школе учат что С++ это надстройка над С
>с возможностью объектного программирования + несколько функций добавлено
>или обманывают?

Абсолютно неверно.  В C++ совершенно по-другому нужно думать, так как доступен новый набор средств.  Код на Си скомпилируется компилятором C++, но он *никогда* не станет настоящим кодом на C++ только из-за использования cin и cout.  То, что хорошо в Си, решается другими методами в C++.  Но вот общие концепции, такие как указатель, глобальные/статические/автоматические/динамические (из кучи) переменные -- общие.  И их проще всего понять в Си.  Это просто о том, как работает машина.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Учебная задача по С++"  
Сообщение от Dmitriy (??) on 14-Мрт-08, 19:58 
пасибо всем - углубился в чтение :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Учебная задача по С++"  
Сообщение от Андрей (??) on 14-Мрт-08, 20:22 
И если уж C++ то можно и наверно нужно использовать ссылку (reference) вместо указателя (pointer)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Учебная задача по С++"  
Сообщение от freewin on 16-Мрт-08, 22:23 
Можно описать структуру как тип
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру