Вопрос-Ответ (C++)
| |
Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |
The Witcher
Сейчас нет на сайте
| Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.
Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
|
|
| |
vasua99 | Дата: Воскресенье, 22 Декабря 2013, 18:07 | Сообщение # 1141 |
GNU follower
Сейчас нет на сайте
| Что подразумевается под максимальной длиной?) А вообще так - Делишь строку на отдельные слова, вычисляешь длину каждого. Ну дальше проблем не должно быть.
P.S Может пригодиться
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
goldsphere | Дата: Воскресенье, 22 Декабря 2013, 18:38 | Сообщение # 1142 |
заслуженный участник
Сейчас нет на сайте
| Destroy, Код #include <iostream> #include <string> using namespace std;
int main() { char* s = ".hello.;lol.works"; string word[99]; int j, i, count, max; j = i = count = 0; while(s[i]) { while(s[i] && (s[i] != '.' && s[i] != ';')) { word[j]+=s[i]; i++; } if(word[j] != "") j++; i++; } max = word[0].length(); for(int i=0;i<99;++i) { if(word[i].length() > max) max = word[i].length(); } for(int i=0;i<99;++i) if(word[i].length() == max) count++; cout<<count; getchar(); getchar(); return 0; }
То есть у тебя есть массив слов и исходная строка. Ты сначала выискиваешь эти слова и забиваешь их в массив. Находишь среди них самое длинное. Затем проверяешь сколько таких же длинных слов.
FinderX - Android Аркада
Сообщение отредактировал goldsphere - Воскресенье, 22 Декабря 2013, 18:46 |
|
| |
OpenGOO | Дата: Воскресенье, 22 Декабря 2013, 19:27 | Сообщение # 1143 |
почти ветеран
Сейчас нет на сайте
| Можно и без массива слов обойтись, надо только сразу считать количество символов в слове, затем проверить на максимум и если слово максимальное посчитать его.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
vasua99 | Дата: Воскресенье, 22 Декабря 2013, 19:31 | Сообщение # 1144 |
GNU follower
Сейчас нет на сайте
| Код #include <iostream> #include <string> #include <vector>
using std::cout; using std::vector; using std::string;
int main() { string s = "hello.lol.works."; int lengthLongest = 0; int count = 0; vector<string> words;
int pos = 0; string token; while ((pos = s.find(".")) != string::npos) { token = s.substr(0, pos); if (lengthLongest < token.length()) lengthLongest = token.length(); words.push_back(token); s.erase(0, pos + 1); } for (vector<string>::iterator curr = words.begin(); curr != words.end(); curr++) { if (curr->size() == lengthLongest) count++; } cout << "Count of longest words: " << count << '\n'; return 0; } Правда для поиска сразу по нескольким разделителям придется модифицировать кое-что.
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
OpenGOO | Дата: Воскресенье, 22 Декабря 2013, 20:39 | Сообщение # 1145 |
почти ветеран
Сейчас нет на сайте
| Код #include <iostream> #include <cstring>
using namespace std;
int main() { char str[] =".hello.;lol.works"; char* pch; int max_len = 1; int w_count = 0;
pch = strtok(str,".;");
while (pch != NULL) { int sl = strlen(pch);
if (sl > max_len) { max_len = sl; w_count = 1; } else if (sl == max_len) { ++w_count; }
pch = strtok (NULL, ".;"); }
cout << "words: " << w_count << endl;
return 0; } Результат:
words: 2
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
vasua99 | Дата: Воскресенье, 22 Декабря 2013, 20:54 | Сообщение # 1146 |
GNU follower
Сейчас нет на сайте
| Цитата OpenGOO ( ) Код #include <iostream> #include <cstring>
using namespace std;
int main() { char str[] =".hello.;lol.works"; char* pch; int max_len = 1; int w_count = 0;
pch = strtok(str,".;");
while (pch != NULL) { int sl = strlen(pch);
if (sl > max_len) { max_len = sl; w_count = 1; } else if (sl == max_len) { ++w_count; }
pch = strtok (NULL, ".;"); }
cout << "words: " << w_count << endl;
return 0; }
Результат:
words: 2
Кстати, только щас заметил. VS2013 выдает unsafe на strtok. Предлагает, strtok_s)
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Destroy | Дата: Среда, 25 Декабря 2013, 00:19 | Сообщение # 1147 |
постоянный участник
Сейчас нет на сайте
| спасибо всем за отклик))
|
|
| |
vasua99 | Дата: Четверг, 26 Декабря 2013, 20:32 | Сообщение # 1148 |
GNU follower
Сейчас нет на сайте
| Вопрос по области видимости.
Насколько ясно, обьявление и директива "using" имеет внешнее связывание(если вне функций). Т.е если мы включим файл File.h с директивой "using" в файл Main.cpp, то она и там продолжить действовать. Есть ли вариант обьявить директиву, но с внутренним связыванием вне функций?. По аналогии с переменными с внутренним связыванием это выглядело бы так:
Код static using std::string; Но ясно, что так работать не будет.
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
Сообщение отредактировал vasua99 - Четверг, 26 Декабря 2013, 20:33 |
|
| |
voodoo | Дата: Среда, 08 Января 2014, 02:25 | Сообщение # 1149 |
был не раз
Сейчас нет на сайте
| Всем привет! Прошу вашей помощи, начал писать змейку на c, всё было хорошо, пока не встал вопрос насчёт хвоста, алгоритм в голове есть, но не могу это программно закрепить.
Вот фрагмент кода, если вас не затруднит, напишите для хвоста функцию, отталкиваясь от этого кода: Код #include <iostream> #include <conio.h> #include <stdlib.h> #include <windows.h> #include <ctime> using namespace std; enum keys { Top = 119, Down = 115, Left = 97, Right = 100 }; int move_Y(int pos_Y, int key_pressed) { switch (key_pressed) { case Top: --pos_Y; break; case Down: ++pos_Y; break; } return pos_Y; } int move_X(int pos_X, int key_pressed) { switch (key_pressed) { case Left: --pos_X; break; case Right: ++pos_X; break; } return pos_X; } int main() { COORD cursor = { 0, 0 }; const int width = 30; const int height = 20; char plane[width][height] = {0}; int pos_Y = height / 2; int pos_X = 0; int key_pressed = Right; while (true) { Sleep(100); if (_kbhit() == true) { key_pressed = _getch(); } pos_Y = move_Y(pos_Y, key_pressed); pos_X = move_X(pos_X, key_pressed); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor); for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { plane[j][i] = 0; plane[pos_X][pos_Y] = 1; } } for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { cout << plane[j][i]; } cout << endl; } } return 0; }
За ранее спасибо!
|
|
| |
froex | Дата: Среда, 08 Января 2014, 17:02 | Сообщение # 1150 |
Руководитель Froexilize team
Сейчас нет на сайте
| voodoo, в списке все части тела храни. При передвижении на следующую клетку в списке заменяешь голову на кусок тела, голову добавляешь в начало списка, один элемент конца списка удаляешь. Если взял что-то, что удлиняет змейку, то ставишь на место головы ставишь кусок тела, голову добавляешь в начало списка, элемент конца списка оставляешь как есть один раз. http://rghost.ru/51486974 - исходники "чуть-чуть" подправил ))) P.S. Управление я не трогал - оно дебильное жуть. У меня твой вариант управления не пашет.Добавлено (08.01.2014, 16:49) --------------------------------------------- Ссылки на просмотр кода: main.cpp: http://pastebin.com/FLPUNJaa snake.cpp: http://pastebin.com/pd4PkFwR snake.hpp: http://pastebin.com/iLwPuHRL config.hpp: http://pastebin.com/CAe6cjhL Добавлено (08.01.2014, 17:02) --------------------------------------------- По поводу управления понял - кейкоды не верно указал. А вообще, для специальных клавиш два кейкода указываются. Может сбрасывать состояние чтением keystroke.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Сообщение отредактировал froex - Среда, 08 Января 2014, 16:42 |
|
| |
voodoo | Дата: Среда, 08 Января 2014, 22:17 | Сообщение # 1151 |
был не раз
Сейчас нет на сайте
| froex, спасибо конечно, но я рассчитывал на что-то по проще, я начинающий, поэтому для меня это не понятно
|
|
| |
froex | Дата: Четверг, 09 Января 2014, 00:41 | Сообщение # 1152 |
Руководитель Froexilize team
Сейчас нет на сайте
| Цитата voodoo ( ) froex, спасибо конечно, но я рассчитывал на что-то по проще, я начинающий, поэтому для меня это не понятно Что не понятно - в скайп froexilize.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
|
|
| |
-l33t-h4xx- | Дата: Четверг, 09 Января 2014, 10:38 | Сообщение # 1153 |
участник
Сейчас нет на сайте
| voodoo, вот, например, моя змейка на С. Она использует библиотеку curses, но это неважно, главное алгоритм. Вся змейка хранится в виде массива структур, в которых записаны координаты Х и Y. После каждого хода, в зависимости от направления движения, массив смещается назад, а координаты хвоста помещаются на следующую после головы клетку. Код #include <curses.h> #include <malloc.h> #include <stdlib.h>
#define SIZE 128 #define LEFT 1 #define RIGHT 2 #define UP 3 #define DOWN 4
typedef struct { int x; int y; } COORD;
int main(int argc, char *argv[]) { COORD *snake, fruit; int length, i, gameover = 0, tempx, tempy, direction = RIGHT, score = 0; char key;
initscr(); cbreak(); noecho(); halfdelay(2); keypad(stdscr, TRUE); srandom(time(NULL));
snake = (COORD*)malloc(sizeof(COORD)*SIZE);
// Инициализация змеи for (i = 0; i < SIZE; i++) { snake[i].x = -1; snake[i].y = -1; }
snake[2].x = 0; snake[1].x = 1; snake[0].x = 2; snake[0].y = snake[1].y = snake[2].y = 0; length = 2;
// Конец инициализации
fruit.x = fruit.y = 5;
while (!gameover) { key = getch();
tempx = snake[0].x; tempy = snake[0].y;
switch (key) { case 'a': direction = LEFT; break; case 's': direction = DOWN; break; case 'w': direction = UP; break; case 'd': direction = RIGHT;break; } switch (direction) { case LEFT: tempx--; break; case RIGHT: tempx++; break; case DOWN: tempy++; break; case UP: tempy--; break; }
for (i = length; i > 0; i--) { snake[i].x = snake[i-1].x; snake[i].y = snake[i-1].y; }
snake[0].x = tempx; snake[0].y = tempy;
if (snake[0].x == fruit.x && snake[0].y == fruit.y) { length++, score++; snake[length] = snake[length-1]; fruit.x = random()%80; fruit.x = random()%60; }
for (i = 1; i <= length; i++) { if (snake[0].x == snake[i].x && snake[0].y == snake[i].y ) gameover = 1; }
clear();
for (i = 0; i <= length; i++) { move(snake[i].y, snake[i].x); addch('#'); } move(fruit.y, fruit.x); addch('O'); move(0, 0); refresh(); }
return 0; }
Как правильно задавать вопросы
Сообщение отредактировал -l33t-h4xx- - Четверг, 09 Января 2014, 10:38 |
|
| |
froex | Дата: Четверг, 09 Января 2014, 12:59 | Сообщение # 1154 |
Руководитель Froexilize team
Сейчас нет на сайте
| -l33t-h4xx-, Добавлено (09.01.2014, 12:52) --------------------------------------------- -l33t-h4xx-, лучше использовать стандартные контейнеры для перемещения головы и хвоста. Стоимость затрат твоего перебора растёт с увеличением длины змейки, а использование контейнеров, как у меня, всегда имеет постоянную стоимость и сложность. Добавлено (09.01.2014, 12:59) --------------------------------------------- -l33t-h4xx-, Cppcheck main.cpp: Ошибка - Memory leak: snake
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Сообщение отредактировал froex - Четверг, 09 Января 2014, 12:41 |
|
| |
Destroy | Дата: Четверг, 09 Января 2014, 18:28 | Сообщение # 1155 |
постоянный участник
Сейчас нет на сайте
| помогите с заданием , буду очень признателен. Сессия горит
Сообщение отредактировал Destroy - Четверг, 09 Января 2014, 18:30 |
|
| |
pelmenka | Дата: Четверг, 09 Января 2014, 18:53 | Сообщение # 1156 |
Драгоценный Тунеядец
Сейчас нет на сайте
| странное задание, будто для экстрасенсов писали
Сталина в каждый дом!
|
|
| |
Destroy | Дата: Четверг, 09 Января 2014, 18:57 | Сообщение # 1157 |
постоянный участник
Сейчас нет на сайте
| Цитата pelmenka ( ) странное задание, будто для экстрасенсов писали это как?
|
|
| |
RUNGOGET2THECHOPAH | Дата: Четверг, 09 Января 2014, 19:07 | Сообщение # 1158 |
участник
Сейчас нет на сайте
| Цитата Destroy ( ) это как? Из задания не понятно, что нужно сделать. О каком вообще диапазоне идет речь? Что за исходный и результирующий массивы? Что значит сформировать столбцы из строк? Транспонировать матрицу что ли? Выводить нужно исходный или результирующий массив?
|
|
| |
Destroy | Дата: Четверг, 09 Января 2014, 19:10 | Сообщение # 1159 |
постоянный участник
Сейчас нет на сайте
| Цитата RUNGOGET2THECHOPAH ( ) О каком вообще диапазоне идет речь? его вводишь сам Цитата RUNGOGET2THECHOPAH ( ) Что за исходный и результирующий массивы? исходный который сам вводишь, результирующий который в результате действий над матрицой Цитата RUNGOGET2THECHOPAH ( ) Что значит сформировать столбцы из строк? Транспонировать матрицу что ли? да, то есть было так: 1 2 3 стало так 1 2 3
Цитата RUNGOGET2THECHOPAH ( ) Выводить нужно исходный или результирующий массив? результирующий
|
|
| |
pelmenka | Дата: Четверг, 09 Января 2014, 19:12 | Сообщение # 1160 |
Драгоценный Тунеядец
Сейчас нет на сайте
| Чем разделять числа? Пробелом или чем-то еще? Что значит "дополнить нулями"? и т. д. Добавлено (09.01.2014, 19:12) ---------------------------------------------
Цитата Destroy ( ) его вводишь сам Ладно, диапазоне чего? Кол-ва чисел или их значения?
Сталина в каждый дом!
|
|
| |
|